#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 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 m_vtStartTiemPerObject; std::vector 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 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 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; };