refator : Controller 스킬 버튼 로드 및 스킬 투사체 & ObjectPool 분리

This commit is contained in:
aube.lee
2025-02-11 00:26:00 +09:00
parent 3cfa9040bf
commit cdc7cbae56
12 changed files with 231 additions and 502 deletions

View File

@@ -2,6 +2,7 @@ using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.Assertions;
using UnityEngine.UI;
namespace TON
@@ -13,51 +14,43 @@ namespace TON
[SerializeField] private GameObject skillIcon;
[SerializeField] private GameObject lockImage;
[SerializeField]
private SerializableDictionary<string, Sprite> skillSprite = new SerializableDictionary<string, Sprite>();
public float currentCoolDown;
public SkillBase skillBase;
public void Initalize(SkillBase skillData)
{
if (skillData != null)
{
skillData.OnSkillExecuted -= OnSkillExecuted;
// skillData.OnCooldownCompleted -= OnCooldownCompleted;
}
skillBase = skillData;
skillData.OnSkillExecuted += OnSkillExecuted;
// skillData.OnCooldownCompleted += OnCooldownCompleted;
skillIcon.SetActive(true);
skillIcon.GetComponent<Image>().sprite = skillSprite.GetValueOrDefault(skillBase.SkillData.id, null);
Assert.IsTrue(AssetManager.Singleton.LoadSkillIcon(skillBase.SkillData.id, out Sprite loadedSkillImage));
skillIcon.GetComponent<Image>().sprite = loadedSkillImage;
lockImage.SetActive(false);
}
public void SetCoolTime()
private void OnSkillExecuted()
{
SkillDataManager.Singleton.SetCoolTime(skillBase.SkillData.id);
if (skillBase.CurrentCoolDown <= 0)
{
// 현재 스킬의 스킬 쿨다운 값을 설정
skillBase.SetCurrentCoolDown();
currentCoolDown = skillBase.CurrentCoolDown;
UpdateCooldownUI();
}
UpdateCooldownUI();
}
private void UpdateCooldownUI()
{
coolTimeText.gameObject.SetActive(currentCoolDown > 0); // 남은 쿨타임이 있을 때만 표시
coolTimeText.text = $"{Mathf.CeilToInt(currentCoolDown)}s"; // 정수 초단위 표시
coolTimeDimd.fillAmount = currentCoolDown / skillBase.SkillData.coolDown; // 1 → 0 으로 감소
coolTimeText.gameObject.SetActive(skillBase.CurrentCoolDown > 0); // 남은 쿨타임이 있을 때만 표시
coolTimeText.text = $"{skillBase.CurrentCoolDown: 0}s"; // 정수 초단위 표시
coolTimeDimd.fillAmount = skillBase.CurrentCoolDown / skillBase.SkillCoolDown; // 1 → 0 으로 감소
}
void Update()
{
if (currentCoolDown > 0)
{
SkillDataManager.Singleton.UpdateSkillCoolDown(skillBase.SkillData.id); // 남은 쿨타임 감소
UpdateCooldownUI(); // UI 업데이트
}
else
{
}
UpdateCooldownUI(); // UI 업데이트
}
}