using GUPS.AntiCheat.Protected; using System.Collections; using System.Collections.Generic; using System.Linq; using TMPro; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.UI; public class Game_Mini : MonoBehaviour { public Game_Mini_Result m_Game_Mini_Result; public TextMeshProUGUI[] texts_money; // 0 하트, 1 챗코인, 2 가챠 코인, 3 폭탄, 4 우산, 5 딜도 public Image i_girl, i_girlsd; public MiniGameItemCard[] items; public Slider slider_hp; public Transform tf_obtacleParent; public GameObject go_Obtacle; public GameObject[] gos_hiteffect; public RectTransform tf_pc; public Joystick m_Joystick; // 1 평소, 2 맞았을 때 AsyncOperationHandle m_Handle1, m_Handle2, m_HandleSD; ProtectedInt32 m_HP; bool bStartGame; float PcPosLimit, PlayTime; Dictionary dic_Money = new Dictionary(); Dictionary dic_MoneyText = new Dictionary(); Dictionary dic_weight = new Dictionary(); List list_MiniGameObtacle = new List(); private void Awake() { PcPosLimit = (Screen.width >> 1) - 70f; } void Init() { if (dic_weight.Count == 0) { dic_weight.Add(eMiniGameObtacleType.White, table_GlobalValue.Ins.Get_Int("MiniGameWeight_White")); dic_weight.Add(eMiniGameObtacleType.Red, table_GlobalValue.Ins.Get_Int("MiniGameWeight_Red")); dic_weight.Add(eMiniGameObtacleType.HpHeal, table_GlobalValue.Ins.Get_Int("MiniGameWeight_HpHeal")); dic_weight.Add(eMiniGameObtacleType.AlbumOpen, table_GlobalValue.Ins.Get_Int("MiniGameWeight_AlbumOpen")); dic_weight.Add(eMiniGameObtacleType.ChatCoin, table_GlobalValue.Ins.Get_Int("MiniGameWeight_ChatCoin")); dic_weight.Add(eMiniGameObtacleType.GachaCoin, table_GlobalValue.Ins.Get_Int("MiniGameWeight_GachaCoin")); dic_weight.Add(eMiniGameObtacleType.ItemBomb, table_GlobalValue.Ins.Get_Int("MiniGameWeight_ItemBomb")); dic_weight.Add(eMiniGameObtacleType.ItemUmbrella, table_GlobalValue.Ins.Get_Int("MiniGameWeight_ItemUmbrella")); dic_weight.Add(eMiniGameObtacleType.ItemDildo, table_GlobalValue.Ins.Get_Int("MiniGameWeight_ItemDildo")); } if (dic_Money.Count == 0) { for (eMiniGameObtacleType i = eMiniGameObtacleType.AlbumOpen; i <= eMiniGameObtacleType.ItemDildo; i++) dic_Money.Add(i, 0); } if (dic_MoneyText.Count == 0) { dic_MoneyText.Add(eMiniGameObtacleType.AlbumOpen, texts_money[0]); dic_MoneyText.Add(eMiniGameObtacleType.ChatCoin, texts_money[1]); dic_MoneyText.Add(eMiniGameObtacleType.GachaCoin, texts_money[2]); dic_MoneyText.Add(eMiniGameObtacleType.ItemBomb, texts_money[3]); dic_MoneyText.Add(eMiniGameObtacleType.ItemUmbrella, texts_money[4]); dic_MoneyText.Add(eMiniGameObtacleType.ItemDildo, texts_money[5]); } for (int i = 0; i < dic_Money.Keys.ToList().Count; i++) { var key = dic_Money.Keys.ToList()[i]; switch (key) { default: dic_Money[key] = 0; break; //case eMiniGameObtacleType.ItemBomb: // dic_Money[key] = SaveMgr.Ins.Get_Money(eMoney.ItemBomb); // break; //case eMiniGameObtacleType.ItemUmbrella: // dic_Money[key] = SaveMgr.Ins.Get_Money(eMoney.ItemUmbrella); // break; //case eMiniGameObtacleType.ItemDildo: // dic_Money[key] = SaveMgr.Ins.Get_Money(eMoney.ItemDildo); // break; } dic_Money[key].Obfuscate(); dic_MoneyText[key].text = dic_Money[key].ToString(); } m_Game_Mini_Result.gameObject.SetActive(false); list_MiniGameObtacle.ForEach(f => f.gameObject.SetActive(false)); tf_pc.anchoredPosition = new Vector2(0f, 325f); DSUtil.InActivateGameObjects(gos_hiteffect); for (int i = 0; i < items.Length; i++) items[i].Set(); PlayTime = 0f; } public void Set() { gameObject.SetActive(true); Init(); i_girl.enabled = false; AddrResourceMgr.Ins.LoadObject($"Girl_Game/{SaveMgr.Ins.Get_SelectGirlID()}-1.png", handle => { m_Handle1 = handle; i_girl.enabled = true; i_girl.sprite = handle.Result; }); AddrResourceMgr.Ins.LoadObject($"Girl_Game/{SaveMgr.Ins.Get_SelectGirlID()}-2.png", handle => { m_Handle2 = handle; }); i_girlsd.enabled = false; AddrResourceMgr.Ins.LoadObject($"Girl_Game/{SaveMgr.Ins.Get_SelectGirlID()}sd.png", handle => { m_HandleSD = handle; i_girlsd.enabled = true; i_girlsd.sprite = handle.Result; }); slider_hp.value = 1f; m_HP = table_GlobalValue.Ins.Get_Int("MiniGameHP"); m_HP.Obfuscate(); StartCoroutine(Co_Update()); } IEnumerator Co_Update() { bStartGame = false; yield return new WaitForSeconds(3f); bStartGame = true; float gap = table_GlobalValue.Ins.Get_Float("MiniGame_Obtacle_Create_Gap"); // 이 시간이 지나면 방해물 생성 float gap_minus_time = table_GlobalValue.Ins.Get_Float("MiniGame_Obtacle_Gap_Time"); // 이 시간이 지나면 방해물 생성 시간 감소 float gap_minus = table_GlobalValue.Ins.Get_Float("MiniGame_Obtacle_Gap_Reduce"); // 방해물 생성 시간 감소값 float gap_minus_limittime = table_GlobalValue.Ins.Get_Float("MiniGame_Obtacle_Gap_LimitTime"); // gap 최소값 Create_Obtacle(); float t_gap = 0f, t_gap_minus_time = 0f; while (true) { if (m_HP <= 0) break; yield return null; t_gap += Time.deltaTime; if (t_gap >= gap) { t_gap = 0f; Create_Obtacle(); } t_gap_minus_time += Time.deltaTime; if (t_gap_minus_time >= gap_minus_time) { t_gap_minus_time = 0f; gap -= gap_minus; if (gap < gap_minus_limittime) gap = gap_minus_limittime; } } } void Create_Obtacle() { var obtacle = list_MiniGameObtacle.Find(f => !f.gameObject.activeInHierarchy); if (obtacle == null) { obtacle = DSUtil.Get_Clone(go_Obtacle, tf_obtacleParent); list_MiniGameObtacle.Add(obtacle); } obtacle.Set(dic_weight); } private void Update() { if (bStartGame) { if (m_HP <= 0) return; PlayTime += Time.deltaTime; var PcSpeed = table_GlobalValue.Ins.Get_Float("MiniGamePCSpeed"); if (m_Joystick.Direction.x < 0f) { tf_pc.anchoredPosition = new Vector2(tf_pc.anchoredPosition.x - Time.deltaTime * PcSpeed, tf_pc.anchoredPosition.y); if (tf_pc.anchoredPosition.x < -PcPosLimit) tf_pc.anchoredPosition = new Vector2(-PcPosLimit, tf_pc.anchoredPosition.y); } else if (m_Joystick.Direction.x > 0f) { tf_pc.anchoredPosition = new Vector2(tf_pc.anchoredPosition.x + Time.deltaTime * PcSpeed, tf_pc.anchoredPosition.y); if (tf_pc.anchoredPosition.x > PcPosLimit) tf_pc.anchoredPosition = new Vector2(PcPosLimit, tf_pc.anchoredPosition.y); } } } Coroutine cohit; public void Hit(eMiniGameObtacleType type, int val) { if (cohit != null) StopCoroutine(cohit); if (m_HP <= 0) { cohit = null; return; } cohit = StartCoroutine(Co_Hit(type, val)); } IEnumerator Co_Hit(eMiniGameObtacleType type, int val) { switch (type) { case eMiniGameObtacleType.White: case eMiniGameObtacleType.Red: m_HP -= val; m_HP.Obfuscate(); slider_hp.value = m_HP / table_GlobalValue.Ins.Get_Float("MiniGameHP"); if (m_HP <= 0) GameOver(); i_girl.sprite = m_Handle2.Result; break; case eMiniGameObtacleType.HpHeal: m_HP += val; m_HP.Obfuscate(); slider_hp.value = m_HP / table_GlobalValue.Ins.Get_Float("MiniGameHP"); break; default: if (!dic_Money.ContainsKey(type)) dic_Money.Add(type, 0); dic_Money[type] += val; if (type == eMiniGameObtacleType.ItemBomb || type == eMiniGameObtacleType.ItemUmbrella || type == eMiniGameObtacleType.ItemDildo) { if (dic_Money[type] > 5) dic_Money[type] = 5; } dic_Money[type].Obfuscate(); if (dic_MoneyText.ContainsKey(type)) dic_MoneyText[type].text = dic_Money[type].ToString(); break; } yield return new WaitForSeconds(0.5f); i_girl.sprite = m_Handle1.Result; } void GameOver() { m_Game_Mini_Result.Set(PlayTime); } public void Save_GameResult() { SaveMgr.Ins.Add_Money(eMoney.AlbumOpen, dic_Money[eMiniGameObtacleType.AlbumOpen]); SaveMgr.Ins.Add_Money(eMoney.Chat, dic_Money[eMiniGameObtacleType.ChatCoin]); SaveMgr.Ins.Add_Money(eMoney.Gacha, dic_Money[eMiniGameObtacleType.GachaCoin]); //SaveMgr.Ins.Set_Money(eMoney.ItemBomb, dic_Money[eMiniGameObtacleType.ItemBomb]); //SaveMgr.Ins.Set_Money(eMoney.ItemUmbrella, dic_Money[eMiniGameObtacleType.ItemUmbrella]); //SaveMgr.Ins.Set_Money(eMoney.ItemDildo, dic_Money[eMiniGameObtacleType.ItemDildo]); SaveMgr.Ins.Save(); } public Dictionary Get_ResultMoney() { return dic_Money; } public void Show_HitEffect(Vector3 pos) { for (int i = 0; i < gos_hiteffect.Length; i++) { if (!gos_hiteffect[i].activeInHierarchy) { StartCoroutine(Co_HitEffect(gos_hiteffect[i], pos)); break; } } } IEnumerator Co_HitEffect(GameObject effect, Vector3 pos) { effect.SetActive(true); effect.GetComponent().position = pos; yield return new WaitForSeconds(1.5f); effect.SetActive(false); } public void OnClick_Exit() { gameObject.SetActive(false); m_Game_Mini_Result.gameObject.SetActive(false); AddrResourceMgr.Ins.Relese(m_Handle1); AddrResourceMgr.Ins.Relese(m_Handle2); AddrResourceMgr.Ins.Relese(m_HandleSD); } }