public float m_fCurTime; //현재 시간 #endregion #region 함수들 /// <summary> /// 각 버프 초기화 /// </summary> /// <param name="obj">대상 오브젝트</param> /// <param name="enumName">버프, 디버프 이넘네임 infomation.eBuffDebuff</param> /// <param name="totalTime">버프, 디버프 총 시간</param> public void Init(GameObject obj, Information.eBuffDebuff enumName, float totalTime) { m_objTarget = obj; m_eBuffDebuffName = enumName; m_fTotalTime = totalTime; m_fCurTime = m_fTotalTime; }
/// <summary> /// 01.버프 푸쉬 /// </summary> /// <param name="obj">버프, 디버프걸 타겟 오브젝트</param> /// <param name="enumName">버프, 디버프의 enum네임(Information.eBuffDebuff.)</param> /// <param name="totalTime">버프, 디버프의 총 시간</param> public void PushBuffDebuff(GameObject obj, Information.eBuffDebuff enumName, float totalTime) { //주려는 버프가 현재 캐릭터가 가지고 있을 때(남은 시간이 갱신하려는 시간보다 작으면 갱신 후 Add안함) if ((m_eBuffDebuffState & enumName) == enumName) { IfSameBuffInit(enumName, totalTime); return; } cBuffDebuffInfo buffDebuff = new cBuffDebuffInfo(); buffDebuff.Init(obj, enumName, totalTime); m_listBuffDebuff.Add(buffDebuff); m_eBuffDebuffState |= enumName; }
/// <summary> /// 02. 시간 감소 맟 시간 = 0 일 때 상태제거하는 메소드 /// </summary> void CheckCountState() { for (int i = 0; i < m_listBuffDebuff.Count; i++) { //현재 버프시간을 델타 타임으로 줄임. m_listBuffDebuff[i].m_fCurTime -= Time.deltaTime; //버프 타임 끝 if (m_listBuffDebuff[i].m_fCurTime <= 0) { //버프 상태 제거 후 리스트에서 삭제. m_eBuffDebuffState -= m_listBuffDebuff[i].m_eBuffDebuffName; m_listBuffDebuff.RemoveAt(i); } } }
/// <summary> /// 주려는 버프가 현재 캐릭터가 가지고 있을 때 (남은 시간이 갱신하려는 시간보다 작으면 갱신) /// </summary> /// <param name="enumName">버프 이넘네임</param> /// <param name="totalTime">버프 총 시간</param> void IfSameBuffInit(Information.eBuffDebuff enumName, float totalTime) { //해당 버프를 찾음 for (int i = 0; i < m_listBuffDebuff.Count; i++) { //해당 버프 이넘네임과 같지 않으면 컨티뉴 if (m_listBuffDebuff[i].m_eBuffDebuffName != enumName) { continue; } //만약 현재 남은시간이 갱신하려는 시간보다 크다면 초기화 안하고 리턴 if (m_listBuffDebuff[i].m_fCurTime > totalTime) { return; } //해당버프를 갱신함 m_listBuffDebuff[i].m_fCurTime = totalTime; } }