스킬 버튼 동작 구현 테스트

This commit is contained in:
aube.lee
2025-02-08 12:35:14 +09:00
parent 2c7f326873
commit 7e63cd2621
6 changed files with 301 additions and 5 deletions

View File

@@ -0,0 +1,31 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace TON
{
[System.Serializable]
public abstract class SkillBase
{
public float SkillCoolDown => SkillData.coolDown;
public float CurrentCoolDown { get; protected set; }
public SkillData SkillData { get; private set; }
public void Init(SkillData skillData)
{
SkillData = skillData;
}
public void UpdateSkill(float deltaTime)
{
CurrentCoolDown -= deltaTime;
CurrentCoolDown = Mathf.Max(0, CurrentCoolDown);
}
public abstract void ExecuteSkill(CharacterBase actor);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9407c2d7c54dec74eac0fe37da48ef1d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -7,6 +7,7 @@ namespace TON
public class SkillDataManager : SingletonBase<SkillDataManager>
{
public List<SkillData> skillDatas { get; private set; }
public List<SkillBase> skillBases { get; private set; }
protected override void Awake()
{
@@ -21,6 +22,10 @@ namespace TON
{
skillDatas = new List<SkillData>();
}
// skillData를 skillBase로 치환
// 기존 스킬 클래스들을 skillBase를 상속받게 변경
}
public SkillData GetSkillData(string skillId)

View File

@@ -74,5 +74,17 @@ namespace TON
linkedCharactor.SkillAttack(skill.skillData.name);
}
private void Update()
{
foreach (var index in skillButtons.Keys)
{
ControllerUI_SkillButton skillButton = skillButtons.GetValueOrDefault(index);
if (skillButton != null && skillButton.skillData != null)
{
// skillButton.SetCoolTime()
}
}
}
}
}

View File

@@ -1,5 +1,6 @@
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
@@ -9,8 +10,10 @@ namespace TON
{
public SkillData skillData;
public GameObject skillImage;
public GameObject lockImage;
[SerializeField] private TextMeshProUGUI coolTimeText;
[SerializeField] private Image coolTimeDimd;
[SerializeField] private GameObject skillIcon;
[SerializeField] private GameObject lockImage;
[SerializeField]
private SerializableDictionary<string, Sprite> skillSprite = new SerializableDictionary<string, Sprite>();
@@ -19,12 +22,18 @@ namespace TON
{
Debug.Log($"Initalize :: {skillData.id}");
this.skillData = skillData;
skillImage.SetActive(true);
skillImage.GetComponent<Image>().sprite = skillSprite.GetValueOrDefault(skillData.id, null);
skillIcon.SetActive(true);
skillIcon.GetComponent<Image>().sprite = skillSprite.GetValueOrDefault(skillData.id, null);
lockImage.SetActive(false);
}
public void SetCoolTime(float remain, float max)
{
coolTimeText.gameObject.SetActive(remain > 0f);
coolTimeText.text = $"{Mathf.CeilToInt(remain)}s";
coolTimeDimd.fillAmount = remain / max;
}
}