Files
2026-06-01 12:46:52 +02:00

153 lines
3.6 KiB
C++

#pragma once
#include "KUIControlNumber.h"
// 추가로 뜨는 Critical, Fail, Resist ,Perfect, MaxHeal 등 전부 이걸 Control에 추가해주는 형태로 작업
class KDamageTextProcess;
class KUIControlDamageText : public KUIControl
{
public:
KUIControlDamageText();
virtual ~KUIControlDamageText();
virtual void Process(DWORD dwTime);
virtual void Render(KViewportObject * pViewport, bool isFront = false );
virtual void OnAlphaChangeNotify(float fAlpha);
/// 외부 알파는 보존하고 바꿔줘야 하므로
void ChangePrimitiveAlpha(float fAlpha);
void ChangeScale(float fScaleFactor);
void AddProcess(KDamageTextProcess* pProcess);
private:
std::vector<KDamageTextProcess*> m_vtProcess;
};
class KUIControlNumberEffectBase : public KUIControlNumber
{
public:
KUIControlNumberEffectBase(const DWORD* pStateTime, int beginState, int maxState);
virtual void OnAlphaChangeNotify(float fAlpha);
void SetActivateChildAll(bool bActive);
protected:
void _CheckNextState(DWORD dwTimeDiff);
void _ChangeAlpha(float fAlpha);
void _MovePos(int x, int y);
protected:
virtual void _initControl();
void _CheckDestroy();
void _RegisterMover(KUIControl* pControl)
{
m_vtAdditionalControlMover.push_back(pControl);
}
protected:
std::vector<DWORD> m_vtStartTiemPerObject;
std::vector<KUIControl*> m_vtAdditionalControlMover; ///< Parent Control 함께 이동을 할 녀석은 이곳에 등록
int m_nMaxState;
int m_nState;
const DWORD* m_pStateTime;
KPoint m_ptOldPos;
DWORD m_dwTime;
DWORD m_dwEffectStartTime;
};
class KUIControlDamage : public KUIControlNumberEffectBase
{
public:
KUIControlDamage();
virtual ~KUIControlDamage();
virtual void Process(DWORD dwTime);
void AddDamageEtcText(LPCSTR aniName, LPCSTR perfectAni = NULL);
void AddExtraDamage(LPCSTR plusAniName, LPCSTR aniName, LPCSTR damageText);
protected:
virtual void _initControl();
void _CheckNextState(DWORD dwTimeDiff);
};
class KUIControlDamageCritical : public KUIControlNumberEffectBase
{
public:
KUIControlDamageCritical();
virtual void Process(DWORD dwTime);
virtual void OnPosChangeNofity(int XOffset, int YOffset);
void AddCriticalText(LPCSTR aniName);
void AddExtraDamage(LPCSTR plusAniName, LPCSTR aniName, LPCSTR damageText);
protected:
virtual void _initControl();
void _CheckNextState(DWORD dwTimeDiff);
protected:
std::vector<int> m_vtXPosPerObject;
};
class KUIControlHealing : public KUIControlNumberEffectBase
{
public:
KUIControlHealing();
virtual ~KUIControlHealing();
virtual void Process(DWORD dwTime);
int GetEachNumberState(size_t idx);
protected:
virtual void _CheckNextState(DWORD dwTimeDiff);
};
class KUIControlHealingMaximize : public KUIControlHealing
{
public:
KUIControlHealingMaximize();
virtual ~KUIControlHealingMaximize();
virtual void Process(DWORD dwTime);
virtual void OnPosChangeNofity(int XOffset, int YOffset);
void AddMaxHealText(LPCSTR aniName);
protected:
virtual void _initControl();
virtual void _CheckNextState(DWORD dwTimeDiff);
protected:
std::vector<int> m_vtXPosPerObject;
};
/// Miss, Block, Fail
class KUIControlDamageEtc : public KUIControl
{
public:
KUIControlDamageEtc();
virtual ~KUIControlDamageEtc();
virtual void Process(DWORD dwTime);
virtual void Render(KViewportObject * pViewport, bool isFront = false );
virtual void OnAlphaChangeNotify(float fAlpha);
void AddPerfectText(LPCSTR aniName);
void SetDelayTime(int time) { m_delayTime = time; }
private:
void _ChangeAlpha(float fAlpha);
void _MovePos(int x, int y);
void _CheckNextState(DWORD dwTimeDiff);
private:
int m_nState;
int m_delayTime;
DWORD m_dwTime;
DWORD m_dwEffectStartTime;
KPoint m_ptOldPos;
};