void CollisionHandler::HandleCollisionsWithMapEdges(MovingObject& _obj) { if (_obj.GetPosition().x < 0) { _obj.UpdateAfterCollisionWithMapEdge(CollisionDirection::LEFT, _obj.GetPosition().x); } float gapRightEdge = _obj.GetPosition().x - (m_levelSize.x - _obj.GetCoordinates().width); if (gapRightEdge > 0) { _obj.UpdateAfterCollisionWithMapEdge(CollisionDirection::RIGHT, gapRightEdge); } if (_obj.GetPosition().y > m_levelSize.y) _obj.Kill(); }
void NewCharacterReadListener::onEvent(const std::string &_eventType, Event* _event) { MovingObject *character = _event->GetMovingObject(); if (character->GetName() == "Mario") m_gameEngine->SetMarioInitialPosition(character->GetPosition()); m_gameEngine->AddCharacterToArray(character); m_gameEngine->AddForegroundItemToArray(character); }
void GameEngine::UpdateCharacterPosition(MovingObject& _character, float _dt) { unsigned int id = _character.GetID(); _character.UpdatePosition(_dt); sf::Vector2f pos = _character.GetPosition(); m_listForegroundItems[id]->SetX(pos.x); m_listForegroundItems[id]->SetY(pos.y); }
void NPC::ShootArrow() { if (!m_flags[eAttacking]) { //TODO: this isn't properly cleaned up. MovingObject* arrow = new MovingObject(m_graphicContext, *m_resourceManager, m_position.x, m_position.y, "Arrow"); arrow->ConnectSlots(*m_drawSignal, *m_updateSignal); arrow->SetEnvList(m_environment); double launchAngle = Utility::CalculateTrajectory(arrow->GetPosition(), m_target->GetPosition(), arrow->GetSpeed(eCompositeSpeed), true); arrow->SetSpeed(eXSpeed, arrow->GetSpeed(eCompositeSpeed) * sin(launchAngle)); arrow->SetSpeed(eYSpeed, arrow->GetSpeed(eCompositeSpeed) * cos(launchAngle)); StartAttack(); arrow->StartMoving(m_direction); } }