void World::update(sf::Time dt) { mWorldView.move(0.f, mScrollSpeed * dt.asSeconds()); mPlayerAircraft->setVelocity(0.f, 0.f); // Forward commands to the scene graph while (!mCommandQueue.isEmpty()) mSceneGraph.onCommand(mCommandQueue.pop(), dt); sf::Vector2f velocity = mPlayerAircraft->getVelocity(); if (velocity.x != 0.f && velocity.y != 0.f) mPlayerAircraft->setVelocity(velocity / std::sqrt(2.f)); mPlayerAircraft->accelerate(0.f, mScrollSpeed); // Regular update step mSceneGraph.update(dt); sf::FloatRect viewBounds(mWorldView.getCenter() - mWorldView.getSize() / 2.f, mWorldView.getSize()); const float borderDistance = 40.f; sf::Vector2f position = mPlayerAircraft->getPosition(); position.x = std::max(position.x, viewBounds.left + borderDistance); position.x = std::min(position.x, viewBounds.left + viewBounds.width - borderDistance); position.y = std::max(position.y, viewBounds.top + borderDistance); position.y = std::min(position.y, viewBounds.top + viewBounds.height - borderDistance); mPlayerAircraft->setPosition(position); }
nsresult nsSubDocumentFrame::CreateViewAndWidget(nsContentType aContentType) { if (mInnerView) { // Nothing to do here return NS_OK; } // create, init, set the parent of the view nsIView* outerView = GetView(); NS_ASSERTION(outerView, "Must have an outer view already"); nsRect viewBounds(0, 0, 0, 0); // size will be fixed during reflow nsIViewManager* viewMan = outerView->GetViewManager(); nsIView* innerView = viewMan->CreateView(viewBounds, outerView); if (!innerView) { NS_ERROR("Could not create inner view"); return NS_ERROR_OUT_OF_MEMORY; } mInnerView = innerView; viewMan->InsertChild(outerView, innerView, nsnull, PR_TRUE); if (aContentType == eContentTypeContentFrame) { // No widget needed. return NS_OK; } return innerView->CreateWidget(kCChildCID, nsnull, nsnull, PR_TRUE, PR_TRUE, aContentType); }
void World::update(sf::Time dt) { mWorldView.move(0.f, mScrollSpeed * dt.asSeconds()); mPlayerAircraft->setVelocity(0.f, 0.f); while(!mCommandQueue.isEmpty()) { mSceneGraph.onCommand(mCommandQueue.pop(), dt); } sf::Vector2f velocity = mPlayerAircraft->getVelocity(); if(velocity.x !=0.f && velocity.y !=0.f) mPlayerAircraft->setVelocity(velocity/std::sqrt(2.f)); mPlayerAircraft->accelerate(sf::Vector2f(0.f, mScrollSpeed)); mSceneGraph.update(dt); // Keep player's position inside the screen bounds, at least borderDistance units from the border sf::FloatRect viewBounds(mWorldView.getCenter() - mWorldView.getSize() / 2.f, mWorldView.getSize()); const float borderDistance = 40.f; sf::Vector2f position = mPlayerAircraft->getPosition(); position.x = std::max(position.x, viewBounds.left + borderDistance); position.x = std::min(position.x, viewBounds.left + viewBounds.width - borderDistance); position.y = std::max(position.y, viewBounds.top + borderDistance); position.y = std::min(position.y, viewBounds.top + viewBounds.height - borderDistance); mPlayerAircraft->setPosition(position); }
void BackgroundImage::Show(BackgroundImageInfo *info, BView *view) { BPoseView *poseView = dynamic_cast<BPoseView *>(view); if (poseView) poseView->SetWidgetTextOutline(info->fTextWidgetOutline); if (info->fBitmap == NULL) { view->ClearViewBitmap(); view->Invalidate(); fShowingBitmap = info; return; } BRect viewBounds(view->Bounds()); BRect bitmapBounds(info->fBitmap->Bounds()); BRect destinationBitmapBounds(bitmapBounds); uint32 tile = 0; uint32 followFlags = B_FOLLOW_TOP | B_FOLLOW_LEFT; // figure out the display mode and the destination bounds for the bitmap switch (info->fMode) { case kCentered: if (fIsDesktop) { destinationBitmapBounds.OffsetBy( (viewBounds.Width() - bitmapBounds.Width()) / 2, (viewBounds.Height() - bitmapBounds.Height()) / 2); break; } // else fall thru case kScaledToFit: if (fIsDesktop) { destinationBitmapBounds = viewBounds; followFlags = B_FOLLOW_ALL; break; } // else fall thru case kAtOffset: destinationBitmapBounds.OffsetTo(info->fOffset); break; case kTiled: if (fIsDesktop) { destinationBitmapBounds.OffsetBy( (viewBounds.Width() - bitmapBounds.Width()) / 2, (viewBounds.Height() - bitmapBounds.Height()) / 2); } tile = B_TILE_BITMAP; break; } // switch to the bitmap and force a redraw view->SetViewBitmap(info->fBitmap, bitmapBounds, destinationBitmapBounds, followFlags, tile); view->Invalidate(); fShowingBitmap = info; }
void World::adaptPlayerPosition() { // Keep player's position inside the screen bounds, at least ds.width - borderDistance); sf::FloatRect viewBounds(mWorldView.getCenter() - mWorldView.getSize() / 2.f, mWorldView.getSize()); const float borderDistance = 80.f; sf::Vector2f position = mPlayerSpaceship->getPosition(); position.x = std::max(position.x, viewBounds.left + borderDistance); position.x = std::min(position.x, viewBounds.left + viewBounds.width - borderDistance); position.y = std::max(position.y, viewBounds.top + borderDistance); position.y = std::min(position.y, viewBounds.top + viewBounds.height - borderDistance); mPlayerSpaceship->setPosition(position); }
void BackgroundImage::ScreenChanged(BRect, color_space) { if (!fIsDesktop || !fShowingBitmap) return; if (fShowingBitmap->fMode == kCentered) { BRect viewBounds(fView->Bounds()); BRect bitmapBounds(fShowingBitmap->fBitmap->Bounds()); BRect destinationBitmapBounds(bitmapBounds); destinationBitmapBounds.OffsetBy( (viewBounds.Width() - bitmapBounds.Width()) / 2, (viewBounds.Height() - bitmapBounds.Height()) / 2); fView->SetViewBitmap(fShowingBitmap->fBitmap, bitmapBounds, destinationBitmapBounds, B_FOLLOW_NONE, 0); fView->Invalidate(); } }
void World::update(sf::Time dt) { mWorldView.move(0.f, dt.asSeconds() * mScrollSpeed); mPlayerAircraft->setVelocity(0.f, 0.f); destoryEntitiesOutOfView(); guideMissiles(); updateScore(); // onCommand while (!mCommandQueue.isEmpty()) mSceneGraph.onCommand(mCommandQueue.pop(), dt); // handles the diagonal velocity sf::Vector2f velocity = mPlayerAircraft->getVelocity(); if (velocity.x != 0.f && velocity.y != 0.f) mPlayerAircraft->setVelocity(velocity / std::sqrt(2.f)); mPlayerAircraft->accelerate(0.f, mScrollSpeed); // handles the cases when aircraft reaches boundaries sf::FloatRect viewBounds(mWorldView.getCenter() - mWorldView.getSize() / 2.f, mWorldView.getSize()); const float borderDistance = 40.f; sf::Vector2f position = mPlayerAircraft->getPosition(); position.x = std::max(position.x, viewBounds.left + borderDistance); position.x = std::min(position.x, viewBounds.left + viewBounds.width - borderDistance); position.y = std::min(position.y, viewBounds.top + viewBounds.height - borderDistance -20.f); position.y = std::max(position.y, viewBounds.top +borderDistance); mPlayerAircraft->setPosition(position); /////////////////// handleCollision(); mSceneGraph.removeWrecks(); spawnEnemies(); mSceneGraph.update(dt, mCommandQueue); }
END_CLASS /* ================ idTrigger::DrawDebugInfo ================ */ void idTrigger::DrawDebugInfo( void ) { idMat3 axis = gameLocal.GetLocalPlayer()->viewAngles.ToMat3(); idVec3 up = axis[ 2 ] * 5.0f; idBounds viewTextBounds( gameLocal.GetLocalPlayer()->GetPhysics()->GetOrigin() ); idBounds viewBounds( gameLocal.GetLocalPlayer()->GetPhysics()->GetOrigin() ); idBounds box( idVec3( -4.0f, -4.0f, -4.0f ), idVec3( 4.0f, 4.0f, 4.0f ) ); idEntity *ent; idEntity *target; int i; bool show; const function_t *func; viewTextBounds.ExpandSelf( 128.0f ); viewBounds.ExpandSelf( 512.0f ); for( ent = gameLocal.spawnedEntities.Next(); ent != NULL; ent = ent->spawnNode.Next() ) { if ( ent->GetPhysics()->GetContents() & ( CONTENTS_TRIGGER | CONTENTS_FLASHLIGHT_TRIGGER ) ) { show = viewBounds.IntersectsBounds( ent->GetPhysics()->GetAbsBounds() ); if ( !show ) { for( i = 0; i < ent->targets.Num(); i++ ) { target = ent->targets[ i ].GetEntity(); if ( target && viewBounds.IntersectsBounds( target->GetPhysics()->GetAbsBounds() ) ) { show = true; break; } } } if ( !show ) { continue; } gameRenderWorld->DebugBounds( colorOrange, ent->GetPhysics()->GetAbsBounds() ); if ( viewTextBounds.IntersectsBounds( ent->GetPhysics()->GetAbsBounds() ) ) { gameRenderWorld->DrawText( ent->name.c_str(), ent->GetPhysics()->GetAbsBounds().GetCenter(), 0.1f, colorWhite, axis, 1 ); gameRenderWorld->DrawText( ent->GetEntityDefName(), ent->GetPhysics()->GetAbsBounds().GetCenter() + up, 0.1f, colorWhite, axis, 1 ); if ( ent->IsType( idTrigger::Type ) ) { func = static_cast<idTrigger *>( ent )->GetScriptFunction(); } else { func = NULL; } if ( func ) { gameRenderWorld->DrawText( va( "call script '%s'", func->Name() ), ent->GetPhysics()->GetAbsBounds().GetCenter() - up, 0.1f, colorWhite, axis, 1 ); } } for( i = 0; i < ent->targets.Num(); i++ ) { target = ent->targets[ i ].GetEntity(); if ( target ) { gameRenderWorld->DebugArrow( colorYellow, ent->GetPhysics()->GetAbsBounds().GetCenter(), target->GetPhysics()->GetOrigin(), 10, 0 ); gameRenderWorld->DebugBounds( colorGreen, box, target->GetPhysics()->GetOrigin() ); if ( viewTextBounds.IntersectsBounds( target->GetPhysics()->GetAbsBounds() ) ) { gameRenderWorld->DrawText( target->name.c_str(), target->GetPhysics()->GetAbsBounds().GetCenter(), 0.1f, colorWhite, axis, 1 ); } } } } } }
/* ============= idEditEntities::DisplayEntities ============= */ void idEditEntities::DisplayEntities( void ) { idEntity *ent; if ( !gameLocal.GetLocalPlayer() ) { return; } selectableEntityClasses.Clear(); selectedTypeInfo_t sit; switch( g_editEntityMode.GetInteger() ) { case 1: sit.typeInfo = &idLight::Type; sit.textKey = "texture"; selectableEntityClasses.Append( sit ); break; case 2: sit.typeInfo = &idSound::Type; sit.textKey = "s_shader"; selectableEntityClasses.Append( sit ); sit.typeInfo = &idLight::Type; sit.textKey = "texture"; selectableEntityClasses.Append( sit ); break; case 3: sit.typeInfo = &idAFEntity_Base::Type; sit.textKey = "articulatedFigure"; selectableEntityClasses.Append( sit ); break; case 4: sit.typeInfo = &idFuncEmitter::Type; sit.textKey = "model"; selectableEntityClasses.Append( sit ); break; case 5: sit.typeInfo = &idAI::Type; sit.textKey = "name"; selectableEntityClasses.Append( sit ); break; case 6: sit.typeInfo = &idEntity::Type; sit.textKey = "name"; selectableEntityClasses.Append( sit ); break; case 7: sit.typeInfo = &idEntity::Type; sit.textKey = "model"; selectableEntityClasses.Append( sit ); break; default: return; } idBounds viewBounds( gameLocal.GetLocalPlayer()->GetPhysics()->GetOrigin() ); idBounds viewTextBounds( gameLocal.GetLocalPlayer()->GetPhysics()->GetOrigin() ); idMat3 axis = gameLocal.GetLocalPlayer()->viewAngles.ToMat3(); viewBounds.ExpandSelf( 512 ); viewTextBounds.ExpandSelf( 128 ); idStr textKey; for( ent = gameLocal.spawnedEntities.Next(); ent != NULL; ent = ent->spawnNode.Next() ) { idVec4 color; textKey = ""; if ( !EntityIsSelectable( ent, &color, &textKey ) ) { continue; } bool drawArrows = false; if ( ent->GetType() == &idAFEntity_Base::Type ) { if ( !static_cast<idAFEntity_Base *>(ent)->IsActiveAF() ) { continue; } } else if ( ent->GetType() == &idSound::Type ) { if ( ent->fl.selected ) { drawArrows = true; } const idSoundShader * ss = declManager->FindSound( ent->spawnArgs.GetString( textKey ) ); if ( ss->HasDefaultSound() || ss->base->GetState() == DS_DEFAULTED ) { color.Set( 1.0f, 0.0f, 1.0f, 1.0f ); } } else if ( ent->GetType() == &idFuncEmitter::Type ) { if ( ent->fl.selected ) { drawArrows = true; } } if ( !viewBounds.ContainsPoint( ent->GetPhysics()->GetOrigin() ) ) { continue; } gameRenderWorld->DebugBounds( color, idBounds( ent->GetPhysics()->GetOrigin() ).Expand( 8 ) ); if ( drawArrows ) { idVec3 start = ent->GetPhysics()->GetOrigin(); idVec3 end = start + idVec3( 1, 0, 0 ) * 20.0f; gameRenderWorld->DebugArrow( colorWhite, start, end, 2 ); gameRenderWorld->DrawText( "x+", end + idVec3( 4, 0, 0 ), 0.15f, colorWhite, axis ); end = start + idVec3( 1, 0, 0 ) * -20.0f; gameRenderWorld->DebugArrow( colorWhite, start, end, 2 ); gameRenderWorld->DrawText( "x-", end + idVec3( -4, 0, 0 ), 0.15f, colorWhite, axis ); end = start + idVec3( 0, 1, 0 ) * +20.0f; gameRenderWorld->DebugArrow( colorGreen, start, end, 2 ); gameRenderWorld->DrawText( "y+", end + idVec3( 0, 4, 0 ), 0.15f, colorWhite, axis ); end = start + idVec3( 0, 1, 0 ) * -20.0f; gameRenderWorld->DebugArrow( colorGreen, start, end, 2 ); gameRenderWorld->DrawText( "y-", end + idVec3( 0, -4, 0 ), 0.15f, colorWhite, axis ); end = start + idVec3( 0, 0, 1 ) * +20.0f; gameRenderWorld->DebugArrow( colorBlue, start, end, 2 ); gameRenderWorld->DrawText( "z+", end + idVec3( 0, 0, 4 ), 0.15f, colorWhite, axis ); end = start + idVec3( 0, 0, 1 ) * -20.0f; gameRenderWorld->DebugArrow( colorBlue, start, end, 2 ); gameRenderWorld->DrawText( "z-", end + idVec3( 0, 0, -4 ), 0.15f, colorWhite, axis ); } if ( textKey.Length() ) { const char *text = ent->spawnArgs.GetString( textKey ); if ( viewTextBounds.ContainsPoint( ent->GetPhysics()->GetOrigin() ) ) { gameRenderWorld->DrawText( text, ent->GetPhysics()->GetOrigin() + idVec3(0, 0, 12), 0.25, colorWhite, axis, 1 ); } } } }