コード例 #1
0
ファイル: MonsterAreaInfo.cpp プロジェクト: adi97ida/Client
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);
}
コード例 #2
0
ファイル: Tower.cpp プロジェクト: bullfrognz/Aegis
void
CTower::Process(float _fDeltaTick)
{
	//Check object tracker valid
	if (m_pObjTracker)
	{
		//Process tracker
		ProcessTracker(_fDeltaTick);
	}


	//Process weapon
	m_pWeapon->Process(_fDeltaTick);


	//Set default varuiables
	unsigned int uiHighestActiveTargetId = 0;
	bool bAttackedEnemy = false;


	//Increment fire timer
	m_fFireTimer += _fDeltaTick;


	//Loop trough max target id
	for (unsigned int i = 0; i <= m_uiMaxActiveTargetId; ++i)
	{
		//Process target
		ProcessTargetEnemyStatus(i);
	

		//Check tower target valid
		if (m_ppTargetEnemy[i])
		{
			//Check tower is ready to fire
			if (m_fFireTimer > m_fFireRate)
			{
				//Attack target
				FireWeaponAtEnemy(m_ppTargetEnemy[i]);


				//Set attacked enemy to true
				bAttackedEnemy = true;
			}

			
			//Remember the current highest active enemy id
			uiHighestActiveTargetId = i;
		}


		//Check index equals max active target id
		//Check index smaller then max targets
		if (i == m_uiMaxActiveTargetId && i < m_uiMaxTargets - 1)
		{
			//Check index does not have a target
			if (m_ppTargetEnemy[i + 1] == 0) 
			{
				//Find new target for index
				ProcessTargetEnemyStatus(i + 1);
			}
		}
	}


	//Set current max active target id
	m_uiMaxActiveTargetId = min(uiHighestActiveTargetId, m_uiMaxActiveTargetId);


	//Check tower had attacked an enemy
	if (bAttackedEnemy == true)
	{
		//Reset fire timer
		m_fFireTimer = 0;


		if (m_cpSndFire)
		{
			CSoundSystem::GetInstance()->NewSound2DInstant(m_cpSndFire);
		}
	}


	//Process derived class CEntity
	CEntity::Process(_fDeltaTick);


	//Process tower mesh
	m_pObjTower->Process(_fDeltaTick);


	//Check tower has frost emitter
	if (m_uiTowerEmitterType & TOWEREMITTER_FROST)
	{
		//Default variables
		CVector3 v3SelfPosition;
		CEntity::m_mtxWorldMatrix.GetPosition(v3SelfPosition);


		//Generate random direction
		CVector3 v3Direction(MathUtility::RandomNumber(-1.5f, 1.5f),
							 MathUtility::RandomNumber(-1.5f, 1.5f),
							 MathUtility::RandomNumber(-1.5f, 1.5f));


		//Calcualte emit position
		v3SelfPosition += m_v3EmitterOffset;


		//Draw particles
		m_pRenderer->GetParticleManager().GetParticleInterface().CreateFrostTower(v3SelfPosition, v3Direction, m_fEmitterTime);
	}
}