enum EQUIP_ITEM_SLOT
{
EQUIP_ITEM_NONE = 0,
EQUIP_ITEM_HELMET,
EQUIP_ITEM_AMULET,
EQUIP_ITEM_AMULET,
EQUIP_ITEM_SHOULDER,
EQUIP_ITEM_ELT,
EQUIP_ITEM_HAND, // 5
EQUIP_ITEM_GLOVE,
EQUIP_ITEM_PANT,
EQUIP_ITEM_SHOE,
EQUIP_ITEM_SHOE,
EQUIP_ITEM_RING,
EQUIP_ITEM_ARMLET, // 10
EQUIP_ITEM_SPECIAL_1,
EQUIP_ITEM_SPECIAL_2,
EQUIP_ITEM_SPECIAL_3,
EQUIP_ITEM_SPECIAL_3,
EQUIP_ITEM_RESERVED_1,
EQUIP_ITEM_RESERVED_2, // 15
EQUIP_ITEM_RESERVED_2, // 15
EQUIP_ITEM_MAX, // 16
EQUIP_ITEM_MIN_PLAYER_SLOT = EQUIP_ITEM_HELMET,
EQUIP_ITEM_MAX_PLAYER_SLOT = EQUIP_ITEM_ARMLET +1,
EQUIP_ITEM_SPECIAL_START = EQUIP_ITEM_SPECIAL_1,
EQUIP_ITEM_SPECIAL_END = EQUIP_ITEM_SPECIAL_3 +1,
};
// 64bit -> 4294967296, 32bit -> 65536
// [34] = { 0, 1, 2, 4, 8, 16, 32, 64, 128, 256,
// 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 252144,
// 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 267435456,
// 534870912, 1069741824, 2139483648, 4278967296 };
// 534870912, 1069741824, 2139483648, 4278967296 };
int bitData[17] = { 0, 1, 2, 4, 8, 16, 32, 64, 128, 256,
512, 1024, 2048, 4096, 8192, 16384 };
int targetEquip = bitData[5] + bitData[10];
// 해당 장착 아이템의 enum 값과 bit 값을 비교하여 해당 위치면 해당 값을 반환하여, true 가 된다.
// bit 연산 이유 : 한가지 적용이 아닌 중복 적용을 하기 위하여.
// 해당 소스는 5번(EQUIP_ITEM_HAND)과 10번(EQUIP_ITEM_ARMLET)이 허용 된다.
// 해당 소스는 5번(EQUIP_ITEM_HAND)과 10번(EQUIP_ITEM_ARMLET)이 허용 된다.
IsEquipSlot( EQUIP_ITEM_SLOT eEquip )
{
return ( (eEquip > EQUIP_ITEM_NONE) && ( targetEquip & (1 << (eEquip -1)) ) );
}
'[ Programing ] > Algorithm' 카테고리의 다른 글
케릭터 간 거리 측정 (0) | 2011.07.14 |
---|---|
UTF-8을 Unicode로, Unicode를 UTF-8로 변환하기. (0) | 2011.01.05 |
거리 계산 (0) | 2011.01.03 |
UTF-8 1~3 Byte 문자 구분 (2) | 2010.07.15 |
FSM (0) | 2010.06.23 |