update teleport animation

This commit is contained in:
Anthony Calosa
2024-11-03 15:27:30 +08:00
parent 5e326ef91a
commit 2d85fd845e
5 changed files with 100 additions and 12 deletions

View File

@@ -3,6 +3,7 @@ package forge.adventure.stage;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Array;
import forge.Forge;
import forge.StaticData;
import forge.adventure.character.PlayerSprite;
import forge.adventure.data.BiomeData;
@@ -17,7 +18,9 @@ import forge.card.ColorSet;
import forge.deck.Deck;
import forge.deck.DeckProxy;
import forge.game.GameType;
import forge.gui.FThreads;
import forge.item.PaperCard;
import forge.screens.CoverScreen;
import java.util.ArrayList;
import java.util.Arrays;
@@ -135,8 +138,16 @@ public class ConsoleCommandInterpreter {
PointOfInterest poi = Current.world().findPointsOfInterest(s[0]);
if (poi == null)
return "PoI " + s[0] + " not found";
WorldStage.getInstance().setPosition(poi.getPosition());
WorldStage.getInstance().player.playEffect(Paths.EFFECT_TELEPORT, 10);
Forge.advFreezePlayerControls = true;
FThreads.invokeInEdtNowOrLater(() -> Forge.setTransitionScreen(new CoverScreen(() -> {
Forge.advFreezePlayerControls = false;
WorldStage.getInstance().setPosition(new Vector2(poi.getPosition().x - 16f, poi.getPosition().y + 16f));
WorldStage.getInstance().loadPOI(poi);
WorldSave.getCurrentSave().autoSave();
Forge.clearTransitionScreen();
//WorldStage.getInstance().player.playEffect(Paths.EFFECT_TELEPORT, 10);
}, Forge.takeScreenshot())));
return "Teleported to " + s[0] + "(" + poi.getPosition() + ")";
});
registerCommand(new String[]{"spawn", "enemy"}, s -> {

View File

@@ -840,6 +840,10 @@ public class GameHUD extends Stage {
debugMap = b;
}
public boolean isDebugMap() {
return debugMap;
}
public void playerIdle() {
if (MapStage.getInstance().isInMap()) {
MapStage.getInstance().startPause(1f);

View File

@@ -53,7 +53,7 @@ import forge.deck.DeckProxy;
import forge.game.GameType;
import forge.gui.FThreads;
import forge.gui.GuiBase;
import forge.screens.TransitionScreen;
import forge.screens.CoverScreen;
import forge.util.MyRandom;
import java.util.HashMap;
@@ -468,13 +468,18 @@ public abstract class GameStage extends Stage {
}
if (keycode == Input.Keys.F2) {
TileMapScene S = TileMapScene.instance();
PointOfInterestData P = PointOfInterestData.getPointOfInterest("DEBUGZONE");
if( P != null)
{
PointOfInterest PoI = new PointOfInterest(P,new Vector2(0,0), MyRandom.getRandom());
S.load(PoI);
Forge.switchScene(S);
// prevent going to Debug Zone by accident if Debug Map isn't enabled..
if (GameHUD.getInstance().isDebugMap()) {
TileMapScene S = TileMapScene.instance();
PointOfInterestData P = PointOfInterestData.getPointOfInterest("DEBUGZONE");
if( P != null)
{
PointOfInterest PoI = new PointOfInterest(P,new Vector2(0,0), MyRandom.getRandom());
S.load(PoI);
Forge.switchScene(S);
}
} else {
System.out.println("Enable Debug Map for Debug Zone.");
}
}
if (keycode == Input.Keys.F11) {
@@ -662,13 +667,13 @@ public abstract class GameStage extends Stage {
@Override
public void run() {
showImageDialog(Current.generateDefeatMessage(), getDefeatBadge(),
() -> FThreads.invokeInEdtNowOrLater(() -> Forge.setTransitionScreen(new TransitionScreen(() -> {
() -> FThreads.invokeInEdtNowOrLater(() -> Forge.setTransitionScreen(new CoverScreen(() -> {
Forge.advFreezePlayerControls = false;
WorldStage.getInstance().setPosition(new Vector2(poi.getPosition().x - 16f, poi.getPosition().y + 16f));
WorldStage.getInstance().loadPOI(poi);
WorldSave.getCurrentSave().autoSave();
Forge.clearTransitionScreen();
}, Forge.takeScreenshot(), ""))));
}, Forge.takeScreenshot()))));
}
}, 1f);
}//Spawn shouldn't be null

View File

@@ -0,0 +1,65 @@
package forge.screens;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import forge.Forge;
import forge.Graphics;
import forge.animation.ForgeAnimation;
import forge.gui.FThreads;
public class CoverScreen extends TransitionScreen {
private CoverAnimation coverAnimation;
Runnable runnable;
TextureRegion textureRegion;
public CoverScreen(Runnable r, TextureRegion t) {
runnable = r;
textureRegion = t;
coverAnimation = new CoverAnimation();
}
private class CoverAnimation extends ForgeAnimation {
float DURATION = 0.6f;
private float progress = 0;
public void drawBackground(Graphics g) {
float percentage = progress / DURATION;
if (percentage < 0) {
percentage = 0;
} else if (percentage > 1) {
percentage = 1;
}
if (textureRegion != null) {
g.drawPortalFade(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), Math.min(percentage, 1f), true);
}
}
@Override
protected boolean advance(float dt) {
progress += dt;
return progress < DURATION;
}
final boolean[] run = {false};//clears transition via runnable so this will reset anyway
@Override
protected void onEnd(boolean endingAll) {
if (runnable != null) {
if (run[0])
return;
run[0] = true;
FThreads.invokeInEdtNowOrLater(runnable);
}
}
}
@Override
protected void drawBackground(Graphics g) {
coverAnimation.start();
coverAnimation.drawBackground(g);
}
@Override
protected void doLayout(float width, float height) {
}
}

View File

@@ -89,6 +89,9 @@ public class TransitionScreen extends FContainer {
layout = new GlyphLayout();
}
public TransitionScreen() {
}
public FProgressBar getProgressBar() {
return progressBar;
}