コード例 #1
0
ファイル: Enemy.cpp プロジェクト: caioteixeira/TowerDefense
void Enemy::BeginTouch(Actor & other){

	//If reaches the end
	if (other.IsAlive() && IsA<Tile>(other)){
		SetIsAlive(false);
		mGame.GetGameMode()->Damage(50);
	}

	//If shooted
	if (other.IsAlive() && IsA<CannonBall>(other)){
		other.SetIsAlive(false);
		mHealth--;
		if (mHealth <= 0){
			SetIsAlive(false);
			mAudio->PlaySound(mDeathSound);
			//Give money to the player
			mGame.GetGameMode()->AddMoney(15);
		}
	}
}
コード例 #2
0
void Player::UpdateMe()
{
	float angle = atan2(m_dashDirection.z, m_dashDirection.x);
	DirectX::XMFLOAT3 position = DirectX::XMFLOAT3(m_position.x, 2.0f, m_position.z);
	m_trail->Update(position, angle);

	//Required for ambient 3D sounds
	if (m_sound != nullptr){
		m_sound->UpdateAmbientSound(m_position.x, m_position.y, m_position.z);
	}

	if (m_updateVisibility)
	{
		m_updateVisibility = false;
		GraphicsEngine::UpdateVisibilityPolygon(Point(m_position.x, m_position.z), (float)GLOBAL::GetInstance().GetDeltaTime());
	}

	// Check values from server
	if (Network::GetInstance()->IsConnected())
	{
		SetHealth(Network::GetInstance()->GetMyPlayer().currentHP);
		SetMaxHealth(Network::GetInstance()->GetMyPlayer().maxHP);
		SetIsAlive(Network::GetInstance()->GetMyPlayer().isAlive);
		SetTeam(Network::GetInstance()->GetMyPlayer().team);
		SetGuID(Network::GetInstance()->GetMyPlayer().guid);
		//SetPosition(DirectX::XMFLOAT3(Network::GetInstance()->GetMyPlayer().x, Network::GetInstance()->GetMyPlayer().y, Network::GetInstance()->GetMyPlayer().z));
	}

	float directionAngle = DirectX::XMVector3AngleBetweenVectors(DirectX::XMLoadFloat3(&m_attackDir), DirectX::XMLoadFloat3(&m_direction)).m128_f32[0];

	if (directionAngle > (3.14f * 0.625f))
	{
		m_speed = m_originalSpeed * 0.85f;
	}
	else
	{
		SetSpeed(m_originalSpeed);
	}
	
	for (unsigned int i = 0; i < m_stickyTrapList.size(); i++)
	{		
		if (Collisions::SphereSphereCollision(m_playerSphere, m_stickyTrapList[i]->GetStickyTrapSphere()))
		{
			SetSpeed(m_speed * STICKY_TRAP_SLOW_PRECENTAGE);
			break;
		}
	}


	UpdateBlood();

	// Don't update player if he is dead
	if (!m_isAlive || Network::GetInstance()->GetMatchOver())
	{
		m_ability = m_noAbility;
		// Animation None ?
		UpdateAbilities();
		UpdateAbilityBar();
		AnimatedObject::ChangeAnimationState(AnimationState::None);
		if (m_sound != nullptr && m_soundEmitter != nullptr){
			m_sound->StopAmbientSound(m_soundEmitter);
		}

		return;
	}

	// Check for dash
	if (Network::GetInstance()->HaveDashed())
	{		
		// Calc distance
		float dx = Network::GetInstance()->GetDashLocation().x - m_position.x;
		float dz = Network::GetInstance()->GetDashLocation().z - m_position.z;
		m_dashDistanceLeft = sqrt(dx * dx + dz * dz);

		// Calc dir
		DirectX::XMVECTOR tempVector = DirectX::XMLoadFloat3(&DirectX::XMFLOAT3(dx, 0, dz));
		tempVector = DirectX::XMVector3Normalize(tempVector);
		DirectX::XMStoreFloat3(&m_dashDirection, tempVector);

		m_isDashing = true;

		m_trail->StartEmiting();
	}

	// Dash movement
	if (m_isDashing)
	{
		float distance = DASH_SPEED * m_speed * (float)GLOBAL::GetInstance().GetDeltaTime();

		Sphere playerSphere = m_playerSphere;
		playerSphere.m_position.x += m_dashDistanceLeft * m_dashDirection.x;
		playerSphere.m_position.z += m_dashDistanceLeft * m_dashDirection.z;		

		if (!CollisionManager::GetInstance()->CheckCollisionWithAllStaticObjects(playerSphere))
		{
			if (distance >= m_dashDistanceLeft)
			{
				m_position.x += m_dashDistanceLeft * m_dashDirection.x;
				m_position.z += m_dashDistanceLeft * m_dashDirection.z;
				m_dashDistanceLeft = 0.0f;
				m_isDashing = false;

				Network::GetInstance()->SendAnimationState(AnimationState::None);

				m_trail->StopEmiting();
			}
			else
			{
				m_position.x += (DASH_SPEED * m_speed * (float)GLOBAL::GetInstance().GetDeltaTime()) * m_dashDirection.x;
				m_position.z += (DASH_SPEED * m_speed * (float)GLOBAL::GetInstance().GetDeltaTime()) * m_dashDirection.z;
				m_dashDistanceLeft -= distance;
			}

			// If we dashed, update shadow shapes.
			GraphicsEngine::UpdateVisibilityPolygon(Point(m_position.x, m_position.z), (float)GLOBAL::GetInstance().GetDeltaTime());
			// Force network to send pos
			Network::GetInstance()->SendLatestPos();
		}

		else
		{
			m_isDashing = false;

			Network::GetInstance()->SendAnimationState(AnimationState::None);

			m_trail->StopEmiting();
		}

		SendPosition(m_position);
	}

	// Move.
	if ((CalculateDirection() || Network::GetInstance()->ConnectedNow()) && !m_isDashing)
	{
		SetCalculatePlayerPosition();

		// If we moved, update shadow shapes.

		GraphicsEngine::UpdateVisibilityPolygon(Point(m_position.x, m_position.z), (float)GLOBAL::GetInstance().GetDeltaTime());

		//Update sound (walking)
	
		m_sound->StartAmbientSound(m_soundEmitter);
		m_soundEmitter->m_pos.x = position.x;
		m_soundEmitter->m_pos.y = position.y;
		m_soundEmitter->m_pos.z = position.z;
	}
	else{
		m_sound->StopAmbientSound(m_soundEmitter);
	}
	m_playerSphere.m_position = m_position;
	
	// Check if the player have made an invalid move
	if (Network::GetInstance()->MadeInvalidMove())
	{
		PlayerNet myPlayer = Network::GetInstance()->GetMyPlayer();
		SendPosition(DirectX::XMFLOAT3(myPlayer.x, myPlayer.y, myPlayer.z));
		Network::GetInstance()->UpdatedMoveFromInvalidMove();

		m_updateVisibility = true;
	}

	// Check if the player need to respawn
	if (Network::GetInstance()->HasRespawned())
	{
		PlayerNet myPlayer = Network::GetInstance()->GetMyPlayer();
		SendPosition(DirectX::XMFLOAT3(myPlayer.x, myPlayer.y, myPlayer.z));
		Network::GetInstance()->SetHaveRespawned();

		m_updateVisibility = true;
	}

	if (Settings::GetInstance()->m_apeToggle)
	{
		if (InputManager::GetInstance()->IsKeyClicked(VkKeyScan(VK_SPACE)))
		{
			m_onPressed = !m_onPressed;
			GLOBAL::GetInstance().APE_ON = !m_onPressed;
		}
	}
	else
	{
		if (InputManager::GetInstance()->IsKeyPressed(VkKeyScan(VK_SPACE)))
		{
			if (Settings::GetInstance()->m_apeEnabled)
			{
				m_onPressed = false;
				GLOBAL::GetInstance().APE_ON = true;
			}
			else
			{
				m_onPressed = true;
				GLOBAL::GetInstance().APE_ON = false;
			}
		}
		else
		{
			if (Settings::GetInstance()->m_apeEnabled)
			{
				m_onPressed = true;
				GLOBAL::GetInstance().APE_ON = false;
			}
			else
			{
				m_onPressed = false;
				GLOBAL::GetInstance().APE_ON = true;
			}
		}
	}

	m_ability = m_noAbility;
	CheckForSpecialAttack();
	if (m_onPressed)
	{
		// Range attack
		if (InputManager::GetInstance()->IsRightMousePressed())
		{
			// Check cd so m_ability does not get set if u have cooldown preventing other abilities to be casted.
			if (m_rangeAttack->GetStacks() > 0 || m_rangeAttack->GetStacks() == -1)
			{
				m_ability = m_rangeAttack;
			}
			else
			{
				StillCDText();
			}
		}
		// Melee attack
		if (InputManager::GetInstance()->IsLeftMousePressed())
		{
			if ((float)m_meleeAttack->GetCooldown() <= 0.0f)
			{
				m_ability = m_meleeAttack;
			}
			else
			{
				StillCDText();
			}
		}
	}
	else
	{		
		// Range attack
		if (InputManager::GetInstance()->IsRightMouseClicked())
		{
			// Check cd so m_ability does not get set if u have cooldown preventing other abilities to be casted.
			if (m_rangeAttack->GetStacks() > 0 || m_rangeAttack->GetStacks() == -1)
			{
				m_ability = m_rangeAttack;
			}
			else
			{
				StillCDText();
			}
		}
		// Melee attack
		if (InputManager::GetInstance()->IsLeftMouseClicked())
		{
			if ((float)m_meleeAttack->GetCooldown() <= 0.0f)
			{
				m_ability = m_meleeAttack;
			}
			else
			{
				StillCDText();
			}
		}
	}

	// Count down cooldowns
	UpdateAbilities();
	throwDistance = CollisionManager::GetInstance()->CalculateMouseDistanceFromPlayer(m_position);
	if (m_ability != m_noAbility && m_globalCooldown <= 0.0f)
	{
		if (m_ability->Execute(throwDistance))
		{
			// Play ability animation if we did any
			DoAnimation();

			// Set global cooldown
			m_globalCooldown = m_maxGlobalCooldown;
		}
	}

	DealtDamageStruct temp = Network::GetInstance()->GetDealtDamage();
	m_floatingText->SetDealtDamageText(temp.m_position ,temp.m_damage);
	UpdateAbilityBar();

}
コード例 #3
0
ファイル: Laser.cpp プロジェクト: caioteixeira/Asteroids
void Laser::OnDieTimer()
{
	SetIsAlive(false);
}
コード例 #4
0
void CannonBall::deSpawn(){
	SetIsAlive(false);
}