BOOL CGridSystem::GetGridChangeTime(CObject* pObject,VECTOR3* pStartPos,VECTOR3* pTargetPos,float MoveSpeed,DWORD& dwChangeTime) { CGridTable * pGridTable = GetGridTable(pObject); if(pGridTable == NULL) return FALSE; return pGridTable->GetGridChangeTime(pStartPos,pTargetPos,MoveSpeed,dwChangeTime); }
void CGridSystem::AddObject(CObject* pObject,VECTOR3* pPos) { CGridTable* const pGridTable = GetGridTable(pObject); if(0 == pGridTable) return; pGridTable->AddObject(pObject, pPos); // 091026 LUJ, 버퍼 크기에 무관하게 전송할 수 있도록 수정 MSGBASE* message = 0; const DWORD messageLength = pObject->SetAddMsg( 0, TRUE, message); PACKEDDATA_OBJ->QuickSendExceptObjectSelf( pObject, message, messageLength); pGridTable->SendCurrentObjectInfo( pObject->GridPos.x, pObject->GridPos.z, -1, -1, pObject); pObject->SetInitedGrid(); }
void CGridSystem::RemoveObject(CObject* pObject) { if(pObject->m_bGridInited == FALSE) return; CGridTable* const pGridTable = GetGridTable(pObject); if(0 == pGridTable) return; MSGBASE* message = 0; const DWORD messageLength = pObject->SetRemoveMsg( 0, message); PACKEDDATA_OBJ->QuickSendExceptObjectSelf( pObject, message, messageLength); pGridTable->RemoveObject(pObject); pObject->GridPos.x = WORD( -1 ); pObject->GridPos.z = WORD( -1 ); pObject->GridPos.LastX = WORD( -1 ); pObject->GridPos.LastZ = WORD( -1 ); pObject->m_bGridInited = FALSE; }
////////////////////////////////////////////////////////////////////////// /// 06. 08. 2차 보스 - 이영준 /// 유효그리드내 랜덤으로 타겟 설정 CObject* CGridSystem::FindPlayerRandom(CObject* pObject) { CGridTable * pGridTable = GetGridTable(pObject); if(pGridTable == NULL) return FALSE; return pGridTable->FindPlayerRandom(pObject); }
void CGridSystem::AddGridToPackedData(GridPosition* pGridPosition,CPackedData* pPackedData, CObject* pObject) { CGridTable * pGridTable = GetGridTable(pObject); if(pGridTable == NULL) return; pGridTable->AddGridToPackedData(pGridPosition, pPackedData); // m_pGridTable[Level].AddGridToPackedData(GridNumX,GridNumZ,pPackedData); }
void CGridSystem::AddLastGridToPackedDataExceptCurrentGrid(GridPosition* pGridPosition,DWORD ExceptID,CPackedData* pPackedData, CObject* pObject) { CGridTable * pGridTable = GetGridTable(pObject); if(pGridTable == NULL) return; pGridTable->AddLastGridToPackedDataExceptCurrentGrid(pGridPosition,ExceptID,pPackedData); // m_pGridTable[Level].AddLastGridToPackedDataExceptCurrentGrid(pGridPosition,ExceptID,pPackedData); }
void CGridSystem::ChangeGrid(CObject* pObject,VECTOR3* pPos) { if(pObject->GetInited() ==FALSE) return; if(pObject->GetInitedGrid() == FALSE) return; CGridTable* pGridTable = GetGridTable(pObject); if(pGridTable == NULL) return; pGridTable->ChangeGrid(pObject, pPos); }
CObject* CGridSystem::FindMonsterInRange(VECTOR3* pPos,float Range, CObject* pObject,BYTE flag) { int firstx = TransToGridCoordinate(pPos->x); int firstz = TransToGridCoordinate(pPos->z); GridPosition GridPos; GridPos.x = WORD( firstx >> GRID_BIT ); GridPos.z = WORD( firstz >> GRID_BIT ); CGridTable * pGridTable = GetGridTable(pObject); if(pGridTable == NULL) return NULL; return pGridTable->FindMonsterInRange(pObject,&GridPos, pPos, Range, flag); }
WORD CGridSystem::FindMonsterGroupInRange(DWORD* pFriendsList, VECTOR3* pPos, CObject* pObject) { CGridTable * pGridTable = GetGridTable(pObject); if(pGridTable == NULL) return 0; int firstx = TransToGridCoordinate(pPos->x); int firstz = TransToGridCoordinate(pPos->z); GridPosition GridPos; GridPos.x = WORD( firstx >> GRID_BIT ); GridPos.z = WORD( firstz >> GRID_BIT ); return pGridTable->FindMonsterGroupInRange(pFriendsList, pObject,&GridPos, pPos); }
// ====================================================================================================== // Grid reading ======================================================================================== // ====================================================================================================== char * BlockGridReading(char * pchar, void * context) { char * p_end, * pnext, * p_eof = pchar+strlen(pchar); ////////////////////////////////////// //...зачитываем параметры сетки узлов; if ( pchar < p_eof) pchar += strlen(TABLESTR); if ((p_end = strstr(pchar, TABLESTR)) != NULL || (p_end = p_eof) != NULL) { //////////////////////////////////////////////////// //...зачитываем число строчек в таблице сетки узлов; int N_group = 0, lenStrSeparator = (int)strlen(STRSEPARATOR); if ( ((pnext = strstr(pchar, STRSEPARATOR)) != NULL && (pnext += lenStrSeparator) <= p_end || (pnext = p_end) != NULL) && (sscanf(pchar, "%i", &N_group) == 1 || pnext == p_end)) { pchar = pnext; ///////////////////////////////////////// //...порождаем новую таблицу сетки узлов; Table * table = GetGridTable(N_group); if (table) { SetTable (context, table); SetTableIndex(context, 1); /////////////////////////////////////// //...заполняем таблицу данными с диска; int i = 0; while (++i <= table->N_group && ((pnext = strstr(pchar, STRSEPARATOR)) != NULL && (pnext += lenStrSeparator) <= p_end || (pnext = p_end) != NULL)) { SetTableParamsAsString(table, i, pchar, pnext); pchar = pnext; } // pchar -- имя профиля (занести в таблицу ???); } } } return(p_end); }