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); } } }
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(); }
void Laser::OnDieTimer() { SetIsAlive(false); }
void CannonBall::deSpawn(){ SetIsAlive(false); }