Mobile-"ish" emscripten support
Full screen "wasm-game" for viewport compatibility between desktop and
web interfaces. Viewport modes ("fit", "center", and "stretch") should
now work the same way under WASM/SDL and SFML. This should also enable
android or web-for-mobile aspect ratios to be supported more easily.
This commit is contained in:
parent
24611c339c
commit
726a9cf09d
9 changed files with 282 additions and 46 deletions
|
|
@ -6,15 +6,15 @@ void SceneTransition::start(TransitionType t, const std::string& from, const std
|
|||
toScene = to;
|
||||
duration = dur;
|
||||
elapsed = 0.0f;
|
||||
|
||||
|
||||
// Initialize render textures if needed
|
||||
if (!oldSceneTexture) {
|
||||
oldSceneTexture = std::make_unique<sf::RenderTexture>();
|
||||
oldSceneTexture->create(1024, 768);
|
||||
oldSceneTexture->create(width, height);
|
||||
}
|
||||
if (!newSceneTexture) {
|
||||
newSceneTexture = std::make_unique<sf::RenderTexture>();
|
||||
newSceneTexture->create(1024, 768);
|
||||
newSceneTexture->create(width, height);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -25,14 +25,17 @@ void SceneTransition::update(float dt) {
|
|||
|
||||
void SceneTransition::render(sf::RenderTarget& target) {
|
||||
if (type == TransitionType::None) return;
|
||||
|
||||
|
||||
float progress = getProgress();
|
||||
float easedProgress = easeInOut(progress);
|
||||
|
||||
|
||||
float w = static_cast<float>(width);
|
||||
float h = static_cast<float>(height);
|
||||
|
||||
// Update sprites with current textures
|
||||
oldSprite.setTexture(oldSceneTexture->getTexture());
|
||||
newSprite.setTexture(newSceneTexture->getTexture());
|
||||
|
||||
|
||||
switch (type) {
|
||||
case TransitionType::Fade:
|
||||
// Fade out old scene, fade in new scene
|
||||
|
|
@ -41,39 +44,39 @@ void SceneTransition::render(sf::RenderTarget& target) {
|
|||
target.draw(oldSprite);
|
||||
target.draw(newSprite);
|
||||
break;
|
||||
|
||||
|
||||
case TransitionType::SlideLeft:
|
||||
// Old scene slides out to left, new scene slides in from right
|
||||
oldSprite.setPosition(-1024 * easedProgress, 0);
|
||||
newSprite.setPosition(1024 * (1.0f - easedProgress), 0);
|
||||
oldSprite.setPosition(-w * easedProgress, 0);
|
||||
newSprite.setPosition(w * (1.0f - easedProgress), 0);
|
||||
target.draw(oldSprite);
|
||||
target.draw(newSprite);
|
||||
break;
|
||||
|
||||
|
||||
case TransitionType::SlideRight:
|
||||
// Old scene slides out to right, new scene slides in from left
|
||||
oldSprite.setPosition(1024 * easedProgress, 0);
|
||||
newSprite.setPosition(-1024 * (1.0f - easedProgress), 0);
|
||||
oldSprite.setPosition(w * easedProgress, 0);
|
||||
newSprite.setPosition(-w * (1.0f - easedProgress), 0);
|
||||
target.draw(oldSprite);
|
||||
target.draw(newSprite);
|
||||
break;
|
||||
|
||||
|
||||
case TransitionType::SlideUp:
|
||||
// Old scene slides up, new scene slides in from bottom
|
||||
oldSprite.setPosition(0, -768 * easedProgress);
|
||||
newSprite.setPosition(0, 768 * (1.0f - easedProgress));
|
||||
oldSprite.setPosition(0, -h * easedProgress);
|
||||
newSprite.setPosition(0, h * (1.0f - easedProgress));
|
||||
target.draw(oldSprite);
|
||||
target.draw(newSprite);
|
||||
break;
|
||||
|
||||
|
||||
case TransitionType::SlideDown:
|
||||
// Old scene slides down, new scene slides in from top
|
||||
oldSprite.setPosition(0, 768 * easedProgress);
|
||||
newSprite.setPosition(0, -768 * (1.0f - easedProgress));
|
||||
oldSprite.setPosition(0, h * easedProgress);
|
||||
newSprite.setPosition(0, -h * (1.0f - easedProgress));
|
||||
target.draw(oldSprite);
|
||||
target.draw(newSprite);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -82,4 +85,4 @@ void SceneTransition::render(sf::RenderTarget& target) {
|
|||
float SceneTransition::easeInOut(float t) {
|
||||
// Smooth ease-in-out curve
|
||||
return t < 0.5f ? 2 * t * t : -1 + (4 - 2 * t) * t;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue