const float Coordinates::WorldFloatToWorldPixel(const float length) { Coordinates tmp; tmp.SetWorldFloat(Vector2D(length, 0.f)); return tmp.GetWorldPixel().x; }
void World::Update(const float time_delta) { mCurrentLevelTime += time_delta; // INPUT! const sf::Input& in = GameApp::get_mutable_instance().GetInput(); sf::View& view = GameApp::get_mutable_instance().GetView(); if(GameApp::get_mutable_instance().IsEditorMode()) { float px = 10; if(in.IsKeyDown(sf::Key::LShift) || in.IsKeyDown(sf::Key::RShift)) { px *= 5; } if(in.IsKeyDown(sf::Key::Up)) { view.SetCenter(view.GetCenter().x, view.GetCenter().y - px); } if(in.IsKeyDown(sf::Key::Down)) { view.SetCenter(view.GetCenter().x, view.GetCenter().y + px); } if(in.IsKeyDown(sf::Key::Left)) { view.SetCenter(view.GetCenter().x - px, view.GetCenter().y); } if(in.IsKeyDown(sf::Key::Right)) { view.SetCenter(view.GetCenter().x + px, view.GetCenter().y); } Coordinates mp; mp.SetScreenPixel(GameApp::get_mutable_instance().GetMousePosition()); if(mEditorMouseAction == EMA_GRAB) { mEditorMouseActionEntity->SetPosition( mEditorMouseActionStartEntityPosition.GetWorldFloat() + mp.GetWorldFloat() - mEditorMouseActionStartMousePosition.GetWorldFloat() ); } else if(mEditorMouseAction == EMA_ALPHA) { float mpf = mp.GetScreenFloat().y; float mspf = mEditorMouseActionStartMousePosition.GetScreenFloat().y; float d = (mspf - mpf) * 5.f; float a = mEditorMouseActionStartEntityAlpha + d; if (a > 1) a = 1; if (a < 0) a = 0; mEditorMouseActionEntity->SetAlpha( a ); } else if(mEditorMouseAction == EMA_SCALE) { Vector2D md = mEditorMouseActionStartEntityPosition.GetScreenPixel() - mp.GetScreenPixel(); Vector2D sd = mEditorMouseActionStartEntityPosition.GetScreenPixel() - mEditorMouseActionStartMousePosition.GetScreenPixel(); float f = md.Magnitude() / sd.Magnitude(); mEditorMouseActionEntity->SetScale( mEditorMouseActionStartEntityScale * f ); } else if(mEditorMouseAction == EMA_ROTATE) { Coordinates ep; ep.SetWorldFloat(mEditorMouseActionEntity->GetPosition()); mEditorMouseActionEntity->SetRotation( (mEditorMouseActionStartMousePosition.GetWorldFloat()-ep.GetWorldFloat()).Rotation() -(mp.GetWorldFloat()-ep.GetWorldFloat()).Rotation() + mEditorMouseActionStartEntityRotation ); } } else if(GameApp::get_mutable_instance().GetAppMode() == AM_PUZZLE) { // draw point on closest rail Rail* r = GetClosestRail(); if(r != NULL) { Coordinates tmp; tmp.SetScreenPixel(GameApp::get_mutable_instance().GetMousePosition()); float d = r->ClosestPositionOnLine(tmp.GetWorldFloat()); mClosestRailPoint = r->GetPointFromFloat(d); } mClosestRail = r; } if(GetBoxEntity() != NULL && GetBoxEntity()->UsesPhysics() && !GameApp::get_mutable_instance().GetInput().IsMouseButtonDown(sf::Mouse::Left)) { mCurrentRail = GetClosestRail(true, GetBoxEntity()->GetBody()->getWorldTransform().getOrigin()); } //mDynamicsWorld->stepSimulation(time_delta, 10); if(GameApp::get_mutable_instance().GetAppMode() == AM_PLAY) { mDynamicsWorld->stepSimulation(1 / 60.f, 10); mDynamicsWorld->clearForces(); } Entity* c = GetClosestEntityOnLayer(GameApp::get_mutable_instance().GetMousePosition(), mEditorLayer); BOOST_FOREACH(Entity& entity, mEntities) { int h = 0; if (mEditorSelectedEntity == &entity) h = 2; else if (c == &entity) h = 1; entity.SetHighlightMode(h); entity.Update(time_delta); /*if(entity.GetLifeTime() >= entity.GetTimeToLive()) { mDynamicsWorld->removeRigidBody(entity.GetBody().get()); mEntities.erase_if(boost::bind(&Entity::GetUID, _1) == entity.GetEntityUniqueId()); }*/ }
const Vector2D Coordinates::WorldFloatToViewPixel(const Vector2D coords) { Coordinates tmp; tmp.SetWorldFloat(coords); return tmp.GetViewPixel(); }