mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
add TextraTypist
for Font Effects, Styles, etc..
This commit is contained in:
@@ -45,6 +45,11 @@
|
||||
<artifactId>forge-gui</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.tommyettinger</groupId>
|
||||
<artifactId>textratypist</artifactId>
|
||||
<version>0.7.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.badlogicgames.gdx</groupId>
|
||||
<artifactId>gdx</artifactId>
|
||||
|
||||
@@ -21,9 +21,13 @@ import com.badlogic.gdx.scenes.scene2d.actions.Actions;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
|
||||
import com.badlogic.gdx.utils.Align;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import com.badlogic.gdx.utils.Scaling;
|
||||
import com.github.tommyettinger.textra.TypingAdapter;
|
||||
import com.github.tommyettinger.textra.TypingLabel;
|
||||
import com.github.tommyettinger.textra.TypingListener;
|
||||
import forge.Forge;
|
||||
import forge.adventure.character.*;
|
||||
import forge.adventure.data.*;
|
||||
@@ -83,11 +87,14 @@ public class MapStage extends GameStage {
|
||||
public boolean getDialogOnlyInput() {
|
||||
return dialogOnlyInput;
|
||||
}
|
||||
|
||||
public Dialog getDialog() {
|
||||
return dialog;
|
||||
}
|
||||
|
||||
public boolean canEscape() { return (preventEscape ? true : false); } //Check if escape is possible.
|
||||
public boolean canEscape() {
|
||||
return (preventEscape ? true : false);
|
||||
} //Check if escape is possible.
|
||||
|
||||
public void clearIsInMap() {
|
||||
isInMap = false;
|
||||
@@ -95,6 +102,7 @@ public class MapStage extends GameStage {
|
||||
preventEscape = false;
|
||||
GameHUD.getInstance().showHideMap(true);
|
||||
}
|
||||
|
||||
public void draw(Batch batch) {
|
||||
//Camera camera = getCamera() ;
|
||||
//camera.update();
|
||||
@@ -114,8 +122,8 @@ public class MapStage extends GameStage {
|
||||
public static MapStage getInstance() {
|
||||
return instance == null ? instance = new MapStage() : instance;
|
||||
}
|
||||
public void resLoaded()
|
||||
{
|
||||
|
||||
public void resLoaded() {
|
||||
dialog = Controls.newDialog("");
|
||||
}
|
||||
|
||||
@@ -196,17 +204,24 @@ public class MapStage extends GameStage {
|
||||
}
|
||||
|
||||
private void effectDialog(EffectData E) {
|
||||
dialog.getContentTable().clear();
|
||||
dialog.getButtonTable().clear();
|
||||
String text = "Strange magical energies flow within this place...\nAll opponents get:\n";
|
||||
text += E.getDescription();
|
||||
Label L = Controls.newLabel(text);
|
||||
dialog.getContentTable().clear();
|
||||
TextButton ok = Controls.newTextButton("OK", this::hideDialog);
|
||||
ok.setVisible(false);
|
||||
TypingLabel L = Controls.newTypingLabel("{GRADIENT=CYAN;WHITE;1;1}Strange magical energies flow within this place...{ENDGRADIENT}\nAll opponents get:\n" + E.getDescription());
|
||||
L.setWrap(true);
|
||||
L.setTypingListener(new TypingAdapter() {
|
||||
@Override
|
||||
public void end() {
|
||||
ok.setVisible(true);
|
||||
}
|
||||
});
|
||||
dialog.getButtonTable().add(ok).width(250f);
|
||||
dialog.getContentTable().add(L).width(250f);
|
||||
dialog.getButtonTable().add(Controls.newTextButton("OK", this::hideDialog)).width(250f);
|
||||
dialog.setKeepWithinStage(true);
|
||||
showDialog();
|
||||
}
|
||||
|
||||
public void showImageDialog(String message, Texture texture) {
|
||||
dialog.getContentTable().clear();
|
||||
dialog.getButtonTable().clear();
|
||||
@@ -226,6 +241,7 @@ public class MapStage extends GameStage {
|
||||
setDialogStage(GameHUD.getInstance());
|
||||
showDialog();
|
||||
}
|
||||
|
||||
public void showDeckAwardDialog(String message, Deck deck) {
|
||||
dialog.getContentTable().clear();
|
||||
dialog.getButtonTable().clear();
|
||||
@@ -301,8 +317,9 @@ public class MapStage extends GameStage {
|
||||
dialog.getContentTable().add().row();
|
||||
}
|
||||
}
|
||||
Label L = Controls.newLabel(message);
|
||||
TypingLabel L = Controls.newTypingLabel(message);
|
||||
L.setWrap(true);
|
||||
L.skipToTheEnd();
|
||||
dialog.getContentTable().add(L).width(240);
|
||||
dialog.getButtonTable().add(Controls.newTextButton("OK", this::hideDialog)).width(240);
|
||||
dialog.setKeepWithinStage(true);
|
||||
@@ -412,9 +429,11 @@ public class MapStage extends GameStage {
|
||||
Object R = prop.get("reward");
|
||||
if (R != null && !R.toString().isEmpty()) {
|
||||
Object S = prop.get("sprite");
|
||||
String Sp; Sp = "sprites/treasure.atlas";
|
||||
String Sp;
|
||||
Sp = "sprites/treasure.atlas";
|
||||
if (S != null && !S.toString().isEmpty()) Sp = S.toString();
|
||||
else System.err.printf("No sprite defined for reward (ID:%s), defaulting to \"sprites/treasure.atlas\"", id);
|
||||
else
|
||||
System.err.printf("No sprite defined for reward (ID:%s), defaulting to \"sprites/treasure.atlas\"", id);
|
||||
RewardSprite RW = new RewardSprite(id, R.toString(), Sp);
|
||||
RW.hidden = hidden;
|
||||
addMapActor(obj, RW);
|
||||
@@ -462,26 +481,13 @@ public class MapStage extends GameStage {
|
||||
//TODO: Ability to move them (using a sequence such as "UULU" for up, up, left, up).
|
||||
break;
|
||||
case "inn":
|
||||
addMapActor(obj, new OnCollide(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Forge.switchScene(SceneType.InnScene.instance);
|
||||
}
|
||||
}));
|
||||
addMapActor(obj, new OnCollide(() -> Forge.switchScene(SceneType.InnScene.instance)));
|
||||
break;
|
||||
case "spellsmith":
|
||||
addMapActor(obj, new OnCollide(new Runnable() {
|
||||
@Override
|
||||
public void run() { Forge.switchScene(SceneType.SpellSmithScene.instance); }
|
||||
}));
|
||||
addMapActor(obj, new OnCollide(() -> Forge.switchScene(SceneType.SpellSmithScene.instance)));
|
||||
break;
|
||||
case "exit":
|
||||
addMapActor(obj, new OnCollide(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
MapStage.this.exit();
|
||||
}
|
||||
}));
|
||||
addMapActor(obj, new OnCollide(() -> MapStage.this.exit()));
|
||||
break;
|
||||
case "dialog":
|
||||
if (obj instanceof TiledMapTileMapObject) {
|
||||
@@ -547,25 +553,17 @@ public class MapStage extends GameStage {
|
||||
if (playerWins) {
|
||||
player.setAnimation(CharacterSprite.AnimationTypes.Attack);
|
||||
currentMob.setAnimation(CharacterSprite.AnimationTypes.Death);
|
||||
startPause(0.3f, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
MapStage.this.getReward();
|
||||
}
|
||||
});
|
||||
startPause(0.3f, () -> MapStage.this.getReward());
|
||||
} else {
|
||||
player.setAnimation(CharacterSprite.AnimationTypes.Hit);
|
||||
currentMob.setAnimation(CharacterSprite.AnimationTypes.Attack);
|
||||
startPause(0.3f, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
startPause(0.3f, () -> {
|
||||
player.setAnimation(CharacterSprite.AnimationTypes.Idle);
|
||||
currentMob.setAnimation(CharacterSprite.AnimationTypes.Idle);
|
||||
player.setPosition(oldPosition4);
|
||||
Current.player().defeated();
|
||||
MapStage.this.stop();
|
||||
currentMob = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -615,6 +613,7 @@ public class MapStage extends GameStage {
|
||||
}
|
||||
currentMob = null;
|
||||
}
|
||||
|
||||
public void removeAllEnemies() {
|
||||
Array<Integer> idsToRemove = new Array<>();
|
||||
for (MapActor actor : new Array.ArrayIterator<>(actors)) {
|
||||
@@ -645,16 +644,13 @@ public class MapStage extends GameStage {
|
||||
break;
|
||||
} else if (actor instanceof RewardSprite) {
|
||||
Gdx.input.vibrate(50);
|
||||
startPause(0.1f, new Runnable() {
|
||||
@Override
|
||||
public void run() { //Switch to item pickup scene.
|
||||
startPause(0.1f, () -> { //Switch to item pickup scene.
|
||||
RewardSprite RS = (RewardSprite) actor;
|
||||
((RewardScene) SceneType.RewardScene.instance).loadRewards(RS.getRewards(), RewardScene.Type.Loot, null);
|
||||
RS.remove();
|
||||
actors.removeValue(RS, true);
|
||||
changes.deleteObject(RS.getId());
|
||||
Forge.switchScene(SceneType.RewardScene.instance);
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
@@ -702,6 +698,7 @@ public class MapStage extends GameStage {
|
||||
dialog.setPosition((dialogStage.getWidth() - dialog.getWidth()) / 2, (dialogStage.getHeight() - dialog.getHeight()) / 2);
|
||||
dialogOnlyInput = true;
|
||||
}
|
||||
|
||||
public void hideDialog() {
|
||||
dialog.hide(Actions.sequence(Actions.sizeTo(dialog.getOriginX(), dialog.getOriginY(), 0.3f), Actions.hide()));
|
||||
dialogOnlyInput = false;
|
||||
@@ -716,7 +713,10 @@ public class MapStage extends GameStage {
|
||||
stop();
|
||||
}
|
||||
|
||||
public void setQuestFlag(String key, int value){ changes.getMapFlags().put(key, (byte) value); }
|
||||
public void setQuestFlag(String key, int value) {
|
||||
changes.getMapFlags().put(key, (byte) value);
|
||||
}
|
||||
|
||||
public void advanceQuestFlag(String key) {
|
||||
Map<String, Byte> C = changes.getMapFlags();
|
||||
if (C.get(key) != null) {
|
||||
@@ -725,12 +725,15 @@ public class MapStage extends GameStage {
|
||||
C.put(key, (byte) 1);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean checkQuestFlag(String key) {
|
||||
return changes.getMapFlags().get(key) != null;
|
||||
}
|
||||
|
||||
public int getQuestFlag(String key) {
|
||||
return (int) changes.getMapFlags().getOrDefault(key, (byte) 0);
|
||||
}
|
||||
|
||||
public void resetQuestFlags() {
|
||||
changes.getMapFlags().clear();
|
||||
}
|
||||
|
||||
@@ -281,7 +281,7 @@ public class WorldStage extends GameStage implements SaveFileContent {
|
||||
}
|
||||
setBounds(WorldSave.getCurrentSave().getWorld().getWidthInPixels(), WorldSave.getCurrentSave().getWorld().getHeightInPixels());
|
||||
if (WorldSave.getCurrentSave().getPlayer().hasAnnounceFantasy()) {
|
||||
MapStage.getInstance().showDeckAwardDialog("Chaos Mode!\n"+ WorldSave.getCurrentSave().getPlayer().getName()+ "'s Deck: "+
|
||||
MapStage.getInstance().showDeckAwardDialog("{BLINK=WHITE;RED}Chaos Mode!{ENDBLINK}\n"+ WorldSave.getCurrentSave().getPlayer().getName()+ "'s Deck: "+
|
||||
WorldSave.getCurrentSave().getPlayer().getSelectedDeck().getName()+
|
||||
"\nEnemy will use Preconstructed or Random Generated Decks. Genetic AI Decks will be available to some enemies on Hard difficulty.", WorldSave.getCurrentSave().getPlayer().getSelectedDeck());
|
||||
WorldSave.getCurrentSave().getPlayer().clearAnnounceFantasy();
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.*;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
|
||||
import com.badlogic.gdx.utils.Align;
|
||||
import com.github.tommyettinger.textra.TypingLabel;
|
||||
import forge.Forge;
|
||||
|
||||
import java.util.function.Function;
|
||||
@@ -155,6 +156,11 @@ public class Controls {
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static TypingLabel newTypingLabel(String name) {
|
||||
TypingLabel ret = new TypingLabel(name, GetSkin());
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static Dialog newDialog(String title) {
|
||||
Dialog ret = new Dialog(title, GetSkin());
|
||||
ret.setMovable(false);
|
||||
|
||||
Reference in New Issue
Block a user