Files
2022-10-26 12:25:11 +08:00

92 lines
2.1 KiB
C++

#pragma once
#include "StateInfoParser.h"
class InterfaceManager;
class CDrawBase;
struct BASE_STATEINFO;
class CElementRender;
/*
// 이미지코드/텍스처핸들 소유/관리
// 키를 통한 상태아이콘 관리
// 상태아이콘 등록
// 등록된 상태아이콘 정보를 이용한 메쉬 정보 갱신
// 렌더
// ETC.
- 행/열로 텍스처 UV 좌표 얻기
*/
class StatusIconManager
{
typedef std::vector<SKILL_EFFECT_IMAGE*> STATUS_ICON_CONTAINER;
public:
enum
{
#ifdef _NA_008139_20150318_MODIFY_BUFF_ICON_UI
MAX_HERO_ICON = 38,
#elif defined(_NA_000000_20130114_RENEWER_UI)
MAX_HERO_ICON = 40,
#else
MAX_HERO_ICON = 30,
#endif
#ifdef _NA_000000_20130114_RENEWER_UI
MAX_PARTYMEMBER_ICON = 20,
#else
MAX_PARTYMEMBER_ICON = 10,
#endif
#ifdef _NA_008139_20150318_MODIFY_BUFF_ICON_UI
MAX_TARGET_ICON = 36,
#elif defined(_NA_000000_20130114_RENEWER_UI)
MAX_TARGET_ICON = 40,
#else
MAX_TARGET_ICON = 10,
#endif
MAX_SUMMON_ICON = 10,
STATUS_ICON_SIZE = 14,
ALPHA_VALUE_MOUSE_OVER_ICON = 100,
MAX_INDEX_STATE_INFO = 140, // 최대 140개(히어로(30)+파티원(10*9)+타겟(10)+소환수(10))
IMAGACODE_STATE_TEXTURE = 38335, // 상태버프 텍스쳐 이미지코드
};
public:
StatusIconManager();
~StatusIconManager();
public:
bool Initialize(InterfaceManager* interfacemanager, CDrawBase* drawbase);
void RegisterStatusIconInfo();
void RegisterStatusIconInfo(std::vector<SKILL_EFFECT_IMAGE>& state_info_container);
void RenderStatusIcon();
private:
void Release();
bool StatusIconRender();
bool CashStatusIconRender();
void LoadTexture();
private:
bool is_initialize_;
InterfaceManager* interfacemanager_;
CDrawBase* drawbase_;
CElementRender* element_render_;
STATUS_ICON_CONTAINER status_icon_container_; // 일반 아이콘-한번에 그린다.
STATUS_ICON_CONTAINER cash_status_icon_container_;// 캐시 아이콘-블렌딩을 해야하므로 따로 그린다.
HANDLE state_texture_;
HANDLE cash_state_texture_;
SI_FRECT frame_texture_rect_;
SI_FRECT frame_texture_rect2_;
void _RenderIconWithBlend( const STATUS_ICON_CONTAINER& IconContainer, HANDLE Texture );
};