void KillableTargetActor::ProcessMessage(const dtGame::Message& message) { // HANDLE GAME EVENT MESSAGE - "TankFired" if (message.GetMessageType() == dtGame::MessageType::INFO_GAME_EVENT) { const dtGame::GameEventMessage& eventMsg = static_cast<const dtGame::GameEventMessage&>(message); // Note, we are using strings which aren't constants. In a real application, these // event names should be stored in some sort of shared place and should be constants... if (eventMsg.GetGameEvent() != 0 && eventMsg.GetGameEvent()->GetName() == "TankFired") { if (mIsTargeted && mCurrentHealth > 0) { SetCurrentHealth(GetCurrentHealth() - 25); } } // test our shaders else if (eventMsg.GetGameEvent() != 0 && eventMsg.GetGameEvent()->GetName() == "TestShaders") { // Note, this behavior is now done in the InputComponent.cpp using the new Shader method. //dtCore::ShaderManager::GetInstance().Clear(); //dtCore::ShaderManager::GetInstance().LoadShaderDefinitions("Shaders/TutorialShaderDefs.xml", false); //ApplyMyShader(); } // reset me! else if (eventMsg.GetGameEvent() != 0 && eventMsg.GetGameEvent()->GetName() == "ResetStuff") { SetTransform(mOriginalPosition); ResetState(); } } // HANDLE TARGET CHANGED MESSAGE else if (message.GetMessageType() == TutorialMessageType::TANK_TARGET_CHANGED) { const TargetChangedMessage& targetChanged = static_cast<const TargetChangedMessage&>(message); mIsTargeted = (targetChanged.GetNewTargetUniqueId() == GetUniqueId()); if (mIsTargeted && mCurrentHealth > 0) { // Ahhhh! Get that gun outta my face! mCurrentShaderName = "Green"; } else { //mCurrentShaderName = "Green"; mCurrentShaderName = "Normal"; } ApplyMyShader(); } }
void PlayerObject::Update(float deltatime, float global_speed, sf::Vector2f mousePos) { //////////Movement if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) { if (sf::Keyboard::isKeyPressed(sf::Keyboard::A) || sf::Keyboard::isKeyPressed(sf::Keyboard::D)) { m_sprite->move(0.0f, -4.0f * deltatime * m_speed * global_speed); } else { m_sprite->move(0.0f, -5.0f * deltatime * m_speed * global_speed); } } if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) { if (sf::Keyboard::isKeyPressed(sf::Keyboard::A) || sf::Keyboard::isKeyPressed(sf::Keyboard::D)) { m_sprite->move(0.0f, 4.0f * deltatime * m_speed * global_speed); } else { m_sprite->move(0.0f, 5.0f * deltatime * m_speed * global_speed); } } if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) { if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) || sf::Keyboard::isKeyPressed(sf::Keyboard::S)) { m_sprite->move(-4.0f * deltatime * m_speed * global_speed, 0.0f); } else { m_sprite->move(-5.0f * deltatime * m_speed * global_speed, 0.0f); } } if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) { if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) || sf::Keyboard::isKeyPressed(sf::Keyboard::S)) { m_sprite->move(4.0f * deltatime * m_speed * global_speed, 0.0f); } else { m_sprite->move(5.0f * deltatime * m_speed * global_speed, 0.0f); } } //////////////Rotation //Your origin sf::Vector2f origin = m_sprite->getPosition(); //Calculate the direction vector sf::Vector2f dirVec = sf::Vector2f(mousePos.x - origin.x, mousePos.y - origin.y); //Calculate the length^2 float magSquare = std::sqrt((dirVec.x * dirVec.x) + (dirVec.y * dirVec.y)); //Change the mag to 1 (you dont need the y for getting the angle dirVec.x = (dirVec.x) / magSquare; //Get the angle and change it to deg (SFML need deg) float rotAngle = std::acos(dirVec.x) * (180 / m_pi); if (m_sprite->getPosition().y < mousePos.y) { m_sprite->setRotation(90 + rotAngle); m_dirt_sprite1->setRotation(90 + rotAngle); m_dirt_sprite1->setColor( sf::Color(255,255,255,(255 * (GetCurrentHealth()/GetMaxHealth())))); } else if (m_sprite->getPosition().x == mousePos.x && m_sprite->getPosition().y == mousePos.y) { } else { m_sprite->setRotation(90 - rotAngle); m_dirt_sprite1->setRotation(90 - rotAngle); m_dirt_sprite1->setColor( sf::Color(255,255,255,(255 * (GetCurrentHealth() / GetMaxHealth())))); } /* if (m_current_animation != nullptr) { m_current_animation->Update(deltatime); } */ m_position = m_sprite->getPosition(); /*if (HasCollider()) { m_collider->m_position = m_sprite->getPosition(); }*/ if (m_dirt_texture != nullptr) { m_dirt_sprite1->setPosition(m_sprite->getPosition().x, m_sprite->getPosition().y); } if (m_animated) { UpdateFrame(deltatime); } }