⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 terraineffectmanager.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
字号:
// TerrainEffectManager.cpp: implementation of the TerrainEffectManager class.
//
//////////////////////////////////////////////////////////////////////

#include "TerrainEffectManager.h"
#include "3DGameMap.h"
#include "Physics.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CTerrainEffectManager::CTerrainEffectManager()
{

}

CTerrainEffectManager::~CTerrainEffectManager()
{
	this->Destroy();
}

//-----------------------------------------------------------------
void CTerrainEffectManager::Destroy()
{
	int nAmount = m_setEffect.size();
	for(int i = 0; i < nAmount; i ++)
	{
		CTerainEffectUnit* pUnit = m_setEffect[i];
		SAFE_DELETE(pUnit);
	}
	m_setEffect.clear();
}
//-----------------------------------------------------------------
void CTerrainEffectManager::Process()
{
	int nAmount = m_setEffect.size();
	for(int i = nAmount-1; i >= 0; i --)
	{
		CTerainEffectUnit* pUnit = m_setEffect[i];
		if(pUnit)
		{
			if(pUnit->Process())
			{
				SAFE_DELETE(pUnit);
				m_setEffect.erase(m_setEffect.begin()+i);
			}
		}
	}
}
//-----------------------------------------------------------------

/*###################################################################*/

//-----------------------------------------------------------------
CTerainEffectUnit::CTerainEffectUnit()
{
	m_dwTimeBegin = ::TimeGet();
	m_nDir = -1;
	m_setMapEffect.clear();
}

CTerainEffectUnit::~CTerainEffectUnit()
{
	this->Die();
}

//------------------------------------------------------------------

void CTerainEffectUnit::Destroy()
{
	int nAmount = m_setUnit.size();
	for(int i = 0; i < nAmount; i ++)
	{
		TerrainEffectUnitInfo* pInfo = m_setUnit[i];
		SAFE_DELETE(pInfo);
	}
	m_setUnit.clear();
	m_setMapEffect.clear();
}

//------------------------------------------------------------------

void CTerainEffectUnit::Die()
{
	int nAmount = m_setMapEffect.size();
	for(int i = 0; i < nAmount; i ++)
	{
		m_setMapEffect[i]->Die();
	}
	m_setMapEffect.clear();
	this->Destroy();
}

//-------------------------------------------------------------------

BOOL CTerainEffectUnit::Process()
{
	int nEffectAmount = m_setMapEffect.size();
	for(int j = nEffectAmount-1; j >= 0; j --)
	{
		if(m_setMapEffect[j]->IsOver())
		{
			m_setMapEffect[j]->Die();
			m_setMapEffect.erase(m_setMapEffect.begin() + j);
		}
	}
	int nAmount = m_setUnit.size();
	if(nAmount == 0 && m_setMapEffect.size() == 0)
		return true;

	for(int i = nAmount-1; i >= 0; i --)
	{
		TerrainEffectUnitInfo* pInfo = m_setUnit[i];
		if(pInfo)
		{
			if(::TimeGet() -  m_dwTimeBegin >= pInfo->dwDelay+::RandGet(pInfo->dwRandomDelay))
			{
				CMyPos posEffect;
				posEffect.x = m_posWorld.x + pInfo->nOffsetX;
				posEffect.y = m_posWorld.y + pInfo->nOffsetY;

				C3DMapEffect* pEffect = g_objGameMap.Add3DMapEffect(posEffect, pInfo->szIndex, false);
				m_setMapEffect.push_back(pEffect);
				SAFE_DELETE(pInfo);
				m_setUnit.erase(m_setUnit.begin() + i);
				if(pEffect && m_nDir != -1)
				{
					pEffect->SetRotate((-45*m_nDir-135)*3.14/180, 0.0);
				}
			}
		}
	}
	return false;
}

//------------------------------------------------------------------

BOOL CTerainEffectUnit::Create(char* pszFileName)
{
	if(!pszFileName)
		return false;
	FILE* fp = fopen(pszFileName, "rb");
	if(!fp)
		return false;
	int nAmount = 0;
	fread(&nAmount, sizeof(DWORD), 1, fp);
	for(int i = 0; i < nAmount; i ++)
	{
		TerrainEffectUnitInfo* pInfo = new TerrainEffectUnitInfo;
		MYASSERT(pInfo);
		fread(pInfo, sizeof(TerrainEffectUnitInfo), 1, fp);
		pInfo->nOffsetX = -pInfo->nOffsetX;
		m_setUnit.push_back(pInfo);
	}
	fclose(fp);
	return true;
}
//------------------------------------------------------------------
CTerainEffectUnit* CTerainEffectUnit::CreateNew(char* pszFileName)
{
	CTerainEffectUnit* pUnit = new CTerainEffectUnit;
	MYASSERT(pUnit);
	if(pUnit->Create(pszFileName))
	{
		return pUnit;
	}
	SAFE_DELETE(pUnit);
	return NULL;
}
//------------------------------------------------------------------
void CTerainEffectUnit::Rotate(CMyPos posSender, CMyPos posTarget)
{
	CMyPos posMyTarget;
	posMyTarget.x = posTarget.x - posSender.x;
	posMyTarget.y = posTarget.y - posSender.y;
	int nAmount = m_setUnit.size();
	for(int i = 0; i  < nAmount; i ++)
	{
		TerrainEffectUnitInfo* pInfo = m_setUnit[i];
		MYASSERT(pInfo);
		CMyPos posPoint;
		posPoint.x = pInfo->nOffsetX;
		posPoint.y = pInfo->nOffsetY;

		CPhysics::S2DR45VP(posMyTarget, posPoint);
		pInfo->nOffsetX = posPoint.x;
		pInfo->nOffsetY = posPoint.y;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -