forked from metin2/client
Solution refactoring and restructuring, removed Boost dependency, removed unused tools
This commit is contained in:
148
src/GameLib/MonsterAreaInfo.cpp
Normal file
148
src/GameLib/MonsterAreaInfo.cpp
Normal file
@ -0,0 +1,148 @@
|
||||
// MonsterAreaInfo.cpp: implementation of the CMonsterAreaInfo class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "MonsterAreaInfo.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
CMonsterAreaInfo::CMonsterAreaInfo()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
|
||||
CMonsterAreaInfo::~CMonsterAreaInfo()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
|
||||
void CMonsterAreaInfo::Clear()
|
||||
{
|
||||
SetOrigin(-1, -1);
|
||||
SetSize(-1, -1);
|
||||
RemoveAllMonsters();
|
||||
}
|
||||
|
||||
void CMonsterAreaInfo::SetOrigin(long lOriginX, long lOriginY)
|
||||
{
|
||||
m_lOriginX = lOriginX;
|
||||
m_lOriginY = lOriginY;
|
||||
SetLRTB();
|
||||
}
|
||||
|
||||
void CMonsterAreaInfo::SetSize(long lSizeX, long lSizeY)
|
||||
{
|
||||
m_lSizeX = lSizeX;
|
||||
m_lSizeY = lSizeY;
|
||||
SetLRTB();
|
||||
}
|
||||
|
||||
void CMonsterAreaInfo::GetOrigin(long * plOriginX, long * plOriginY)
|
||||
{
|
||||
*plOriginX = m_lOriginX;
|
||||
*plOriginY = m_lOriginY;
|
||||
}
|
||||
|
||||
void CMonsterAreaInfo::GetSize(long * plSizeX, long * plSizeY)
|
||||
{
|
||||
*plSizeX = m_lSizeX;
|
||||
*plSizeY = m_lSizeY;
|
||||
}
|
||||
|
||||
void CMonsterAreaInfo::SetLRTB()
|
||||
{
|
||||
m_lLeft = m_lOriginX - m_lSizeX;
|
||||
m_lTop = m_lOriginY - m_lSizeY;
|
||||
m_lRight = m_lOriginX + m_lSizeX;
|
||||
m_lBottom = m_lOriginY + m_lSizeY;
|
||||
}
|
||||
|
||||
void CMonsterAreaInfo::SetMonsterCount(DWORD dwCount)
|
||||
{
|
||||
m_dwMonsterCount = dwCount;
|
||||
|
||||
if (m_TempMonsterPosVector.size() == dwCount)
|
||||
return;
|
||||
|
||||
m_TempMonsterPosVector.clear();
|
||||
m_TempMonsterPosVector.resize(dwCount);
|
||||
|
||||
for (DWORD dwI = 0; dwI < dwCount; ++dwI)
|
||||
{
|
||||
m_TempMonsterPosVector[dwI].x = (float)random_range(m_lLeft, m_lRight);
|
||||
m_TempMonsterPosVector[dwI].y = (float)random_range(m_lTop, m_lBottom);
|
||||
}
|
||||
}
|
||||
|
||||
void CMonsterAreaInfo::SetMonsterDirection(EMonsterDir eMonsterDir)
|
||||
{
|
||||
m_eMonsterDir = eMonsterDir;
|
||||
D3DXMATRIX matRotation;
|
||||
D3DXVECTOR3 v3Direction(0.0f, 1.0f, 0.0f);
|
||||
float fDegree = 0.0f;
|
||||
switch(m_eMonsterDir)
|
||||
{
|
||||
case DIR_RANDOM:
|
||||
fDegree = (float) random_range(0, 7) * 45.0f;
|
||||
break;
|
||||
case DIR_NORTH:
|
||||
fDegree = 0.0f;
|
||||
break;
|
||||
case DIR_NORTHEAST:
|
||||
fDegree = 45.0f;
|
||||
break;
|
||||
case DIR_EAST:
|
||||
fDegree = 90.0f;
|
||||
break;
|
||||
case DIR_SOUTHEAST:
|
||||
fDegree = 135.0f;
|
||||
break;
|
||||
case DIR_SOUTH:
|
||||
fDegree = 180.0f;
|
||||
break;
|
||||
case DIR_SOUTHWEST:
|
||||
fDegree = 225.0f;
|
||||
break;
|
||||
case DIR_WEST:
|
||||
fDegree = 270.0f;
|
||||
break;
|
||||
case DIR_NORTHWEST:
|
||||
fDegree = 315.0f;
|
||||
break;
|
||||
}
|
||||
D3DXMatrixRotationZ(&matRotation, -D3DXToRadian(fDegree));
|
||||
D3DXVec3TransformCoord(&v3Direction, &v3Direction, &matRotation);
|
||||
m_v2Monsterdirection.x = v3Direction.x;
|
||||
m_v2Monsterdirection.y = v3Direction.y;
|
||||
D3DXVec2Normalize(&m_v2Monsterdirection, &m_v2Monsterdirection);
|
||||
}
|
||||
|
||||
void CMonsterAreaInfo::RemoveAllMonsters()
|
||||
{
|
||||
SetMonsterAreaInfoType(MONSTERAREAINFOTYPE_INVALID);
|
||||
|
||||
SetMonsterGroupID(0);
|
||||
|
||||
m_strGroupName.assign("<EFBFBD≯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
m_strLeaderName.assign("<EFBFBD≯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
SetMonsterGroupFollowerCount(0);
|
||||
|
||||
SetMonsterVID(0);
|
||||
m_strMonsterName.assign("<EFBFBD≯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
|
||||
SetMonsterCount(0);
|
||||
SetMonsterDirection(DIR_NORTH);
|
||||
|
||||
m_TempMonsterPosVector.clear();
|
||||
}
|
||||
|
||||
D3DXVECTOR2 CMonsterAreaInfo::GetTempMonsterPos(DWORD dwIndex)
|
||||
{
|
||||
if (dwIndex >= m_TempMonsterPosVector.size())
|
||||
return D3DXVECTOR2(0.0f, 0.0f);
|
||||
return m_TempMonsterPosVector[dwIndex];
|
||||
}
|
||||
|
Reference in New Issue
Block a user