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

170 lines
5.2 KiB
C++

#ifndef __APPEARANCE_MANAGER_H__
#define __APPEARANCE_MANAGER_H__
//------------------------------------------------------------------------------
/**
오브젝트 타입에 따라 본정보를 세팅
@author
@since
@remarks
-2005.06.07 소스 정리(지완)
-
*/
#pragma once
#include "Singleton.h"
#include "CharacterDef.h"
class Object;
struct BASE_NPCINFO;
#define APPEARANCEMGR AppearanceManager::Instance()
typedef struct _EQUIPAPPEARINFO
{
DWORD dwItemID;
BOOL bDivine;
int iEnchant;
} EQUIPAPPEARINFO;
struct APPEARANCEINFO
{
enum eAPPEARKIND
{
PLAYER,
MONSTER,
PET,
SKYBOX,
ITEM,
MONEY,
MAPOBJECT,
CAMERA,
PLAYERTRANSFORM,
POLOMORPH,
};
eAPPEARKIND ObjectType;
union
{
struct
{ //PLAYER
DWORD Job; // equip이랑 기타 정보를 담아야 할것이다.
};
struct
{ //PLAYERTRANSFORM
DWORD resourceCode;
};
struct
{ //MONSTER
BASE_NPCINFO* pMonsterInfo;
};
// TODO // 나중에 특화된 정보가 있다면 넣어야함.
struct
{ //SKY
DWORD SkyBoxNum;
};
struct
{ // ITEM
DWORD ItemCode;
DWORD dwMoney;
#ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING
BYTE is_dice_item;
#endif //_NA_003033_20110831_DICECAST_ITEM_ROUTING
};
struct
{ // MAPOBJECT
DWORD MapObjectID; // Unit ID
DWORD dwAttr; // 속성을 받아넣는다.
TCHAR szUnitFile[MAX_PATH];
WzVector wzPos;
WzVector wzRot;
WzVector wzScale;
WzColor wzColor; // 지형컬러
WzBoundingVolume wzBV;
WzID wiUserID; //채집관련 ID (이름변경 필요)
};
};
// 장비
EQUIPAPPEARINFO Equipment[BP_COUNT];
// 텍스쳐 비율
float texture_rate;
};
class AppearanceManager : public util::Singleton<AppearanceManager>
{
public:
const static int kAppearanceAttachIndex_Count = 5;
const static int kAppearanceAttachIndex_RightHand = 0;
const static int kAppearanceAttachIndex_LeftHand = 1;
const static int kAppearanceAttachIndex_Accessory1 = 2;
const static int kAppearanceAttachIndex_Accessory2 = 3;
const static int kAppearanceAttachIndex_Accessory3 = 4;
//const static int kAppearanceAttachIndex_Fullset = 5;
AppearanceManager(void);
~AppearanceManager(void);
void LoadPlayerItemAppearInfo();
void SetAppearance( APPEARANCEINFO * pAppearInfo, Object * pObject, BOOL bRefreshBone, BOOL bMakeBoneOnly);
void SetPlayerAppearance( APPEARANCEINFO * pAppearInfo, Object * pObject, BOOL bRefreshBone, BOOL bMakeBoneOnly);
void SetMonsterAppearance( APPEARANCEINFO * pAppearInfo, Object * pObject, BOOL bRefreshBone = FALSE );
void SetPetAppearance(APPEARANCEINFO* appear_ptr, Object* object_ptr);
//void SetSkyBoxAppearance( APPEARANCEINFO * pAppearInfo, Object * pObject, BOOL bRefreshBone = FALSE );
void SetItemAppearance( APPEARANCEINFO * pAppearInfo, Object * pObject);
//void SetItemMoneyAppearance( APPEARANCEINFO * pAppearInfo, Object *pObject, BOOL bRefreshBone = FALSE );
void SetMapObjectAppearance( APPEARANCEINFO * pAppearInfo, Object * pObject, BOOL bRefreshBone = FALSE );
void SetPlayerTransFormAppearance(APPEARANCEINFO * pAppearInfo,Object * pObject, BOOL bRefreshBone = FALSE);
void SetCameraObjectAppearance(APPEARANCEINFO * pAppearInfo,Object *pObject, BOOL bRefreshBone = FALSE );
void SetPolymorphApperance( Object *pObject, BOOL bRefreshBone = FALSE );
//------------------------------------------------------------------------------
//! Returns: bool
//! Qualifier:
//! Parameter: OUT WzMatrix & mx_pos
//! Parameter: DWORD item_code : 붙여질 곳의 아이템 코드
//------------------------------------------------------------------------------
bool GetAccessoryPosition(OUT WzMatrix& mx_pos, DWORD item_code);
bool GetAccessoryPosition(OUT WzVector& pos, DWORD item_code);
//------------------------------------------------------------------------------
//! Returns: bool
//! Qualifier:
//! Parameter: OUT WzMatrix & mx_rot
//! Parameter: DWORD item_code : 붙일 아아템 코드
//------------------------------------------------------------------------------
bool GetAccessoryRotation(OUT WzMatrix& mx_rot, DWORD item_code);
private:
// about player
void _SetPlayerBodyAppearance(APPEARANCEINFO* pAppearInfo, Object * pObject);
void _SetPlayerWeaponAppearance(APPEARANCEINFO* pAppearInfo, Object * pObject);
void _SetPlayerSpecialAccessoryAppearance(APPEARANCEINFO* pAppearInfo, Object * pObject);
bool InvalidAccessory(DWORD ItemCode);
void ApplySpecialAccessoryAppearance(APPEARANCEINFO* appear_info, Character* character_ptr);
private:
void _SetEquipItemPart( Object* pObject, const EQUIPAPPEARINFO& equip_info, BodyPart parts_index, float texture_rate, GenderType::Value Gender );
void _SetCustumBodyPart( Object* pObject, DWORD CustomCode, float texture_rate );
void _SetDefaultPart( Object* pObject, eCHAR_TYPE Job, BodyPart PartIndex, float texture_rate, GenderType::Value Gender );
};
#endif