diff --git a/core/src/main/assets/loading_caves.png b/core/src/main/assets/loading_caves.png new file mode 100644 index 000000000..5ed484cb3 Binary files /dev/null and b/core/src/main/assets/loading_caves.png differ diff --git a/core/src/main/assets/loading_city.png b/core/src/main/assets/loading_city.png new file mode 100644 index 000000000..24da8f4ae Binary files /dev/null and b/core/src/main/assets/loading_city.png differ diff --git a/core/src/main/assets/loading_halls.png b/core/src/main/assets/loading_halls.png new file mode 100644 index 000000000..e41dabc34 Binary files /dev/null and b/core/src/main/assets/loading_halls.png differ diff --git a/core/src/main/assets/loading_prison.png b/core/src/main/assets/loading_prison.png new file mode 100644 index 000000000..232d40124 Binary files /dev/null and b/core/src/main/assets/loading_prison.png differ diff --git a/core/src/main/assets/loading_sewers.png b/core/src/main/assets/loading_sewers.png new file mode 100644 index 000000000..03a9485fc Binary files /dev/null and b/core/src/main/assets/loading_sewers.png differ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java index 5d41e8912..af92f95c0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Assets.java @@ -112,6 +112,12 @@ public class Assets { public static final String WATER_CAVES = "water2.png"; public static final String WATER_CITY = "water3.png"; public static final String WATER_HALLS = "water4.png"; + + public static final String LOADING_SEWERS = "loading_sewers.png"; + public static final String LOADING_PRISON = "loading_prison.png"; + public static final String LOADING_CAVES = "loading_caves.png"; + public static final String LOADING_CITY = "loading_city.png"; + public static final String LOADING_HALLS = "loading_halls.png"; public static final String WEAK_FLOOR = "custom_tiles/weak_floor.png"; public static final String PRISON_QUEST = "custom_tiles/prison_quests.png"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java index 2861727b6..2b87af907 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/InterlevelScene.java @@ -34,9 +34,15 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.ui.GameLog; import com.shatteredpixel.shatteredpixeldungeon.windows.WndError; import com.shatteredpixel.shatteredpixeldungeon.windows.WndStory; +import com.watabou.gltextures.TextureCache; +import com.watabou.glwrap.Blending; import com.watabou.noosa.Camera; import com.watabou.noosa.Game; +import com.watabou.noosa.Image; +import com.watabou.noosa.NoosaScript; +import com.watabou.noosa.NoosaScriptNoLighting; import com.watabou.noosa.RenderedText; +import com.watabou.noosa.SkinnedBlock; import com.watabou.noosa.audio.Sample; import java.io.FileNotFoundException; @@ -44,7 +50,7 @@ import java.io.IOException; public class InterlevelScene extends PixelScene { - private static final float TIME_TO_FADE = 0.3f; + private static final float TIME_TO_FADE = 1f; public enum Mode { DESCEND, ASCEND, CONTINUE, RESURRECT, RETURN, FALL, RESET, NONE @@ -73,6 +79,79 @@ public class InterlevelScene extends PixelScene { @Override public void create() { super.create(); + + String loadingAsset; + int loadingDepth; + final float scrollSpeed; + switch (mode){ + default: + loadingDepth = Dungeon.depth; + scrollSpeed = 0; + break; + case CONTINUE: + loadingDepth = GamesInProgress.check(GamesInProgress.curSlot).depth; + scrollSpeed = 5; + break; + case DESCEND: + if (Dungeon.hero == null) loadingDepth = 1; + else loadingDepth = Dungeon.depth+1; + scrollSpeed = 5; + break; + case FALL: + loadingDepth = Dungeon.depth+1; + scrollSpeed = 100; + break; + case ASCEND: + loadingDepth = Dungeon.depth-1; + scrollSpeed = -5; + break; + case RETURN: + loadingDepth = returnDepth; + scrollSpeed = returnDepth > Dungeon.depth ? 15 : -15; + break; + } + if (loadingDepth <= 5) loadingAsset = Assets.LOADING_SEWERS; + else if (loadingDepth <= 10) loadingAsset = Assets.LOADING_PRISON; + else if (loadingDepth <= 15) loadingAsset = Assets.LOADING_CAVES; + else if (loadingDepth <= 21) loadingAsset = Assets.LOADING_CITY; + else loadingAsset = Assets.LOADING_HALLS; + + SkinnedBlock bg = new SkinnedBlock(Camera.main.width, Camera.main.height, loadingAsset ){ + @Override + protected NoosaScript script() { + return NoosaScriptNoLighting.get(); + } + + @Override + public void draw() { + Blending.disable(); + super.draw(); + Blending.enable(); + } + + @Override + public void update() { + super.update(); + offset(0, Game.elapsed * scrollSpeed); + } + }; + bg.scale(4, 4); + add(bg); + + Image im = new Image(TextureCache.createGradient(0xAA000000, 0xBB000000, 0xCC000000, 0xDD000000, 0xFF000000)){ + @Override + public void update() { + super.update(); + if (phase == Phase.FADE_IN) aa = Math.max( 0, timeLeft - 0.6f); + else if (phase == Phase.FADE_OUT) aa = Math.max( 0, 0.4f - (timeLeft)); + else aa = 0; + } + }; + im.angle = 90; + im.x = Camera.main.width; + im.scale.x = Camera.main.height/5f; + im.scale.y = Camera.main.width; + add(im); String text = Messages.get(Mode.class, mode.name());