mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
Merge pull request #6523 from kevlahnota/master2
refactor HeroListData, update CoverScreen
This commit is contained in:
@@ -18,29 +18,29 @@ import forge.adventure.util.Paths;
|
|||||||
*/
|
*/
|
||||||
public class HeroListData {
|
public class HeroListData {
|
||||||
static private HeroListData instance;
|
static private HeroListData instance;
|
||||||
public HeroData[] heroes;
|
private HeroData[] heroes;
|
||||||
public String avatar;
|
private String avatar;
|
||||||
private TextureAtlas avatarAtlas;
|
private TextureAtlas avatarAtlas;
|
||||||
private final ObjectMap<String, Array<Sprite>> avatarSprites = new ObjectMap<>();
|
private final ObjectMap<String, Array<Sprite>> avatarSprites = new ObjectMap<>();
|
||||||
|
|
||||||
static private HeroListData read() {
|
static public HeroListData instance() {
|
||||||
|
if (instance == null) {
|
||||||
Json json = new Json();
|
Json json = new Json();
|
||||||
FileHandle handle = Config.instance().getFile(Paths.HEROES);
|
FileHandle handle = Config.instance().getFile(Paths.HEROES);
|
||||||
if (handle.exists()) {
|
if (handle.exists()) {
|
||||||
instance = json.fromJson(HeroListData.class, handle);
|
instance = json.fromJson(HeroListData.class, handle);
|
||||||
instance.avatarAtlas = Config.instance().getAtlas(instance.avatar);
|
instance.avatarAtlas = Config.instance().getAtlas(instance.avatar);
|
||||||
|
// leaving here as reference since PixelArt images use Nearest without MipMaps. By default it shouldn't have any filters
|
||||||
/*
|
/*instance.avatarSprites.getTextures().first().setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest);*/
|
||||||
instance.avatarSprites.getTextures().first().setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest);
|
} else {
|
||||||
*/
|
throw new RuntimeException("Path not found: " + handle.path());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
static public String getHero(int raceIndex, boolean female) {
|
public String getHero(int raceIndex, boolean female) {
|
||||||
if (instance == null)
|
HeroData data = instance().heroes[raceIndex];
|
||||||
instance = read();
|
|
||||||
HeroData data = instance.heroes[raceIndex];
|
|
||||||
|
|
||||||
if (female)
|
if (female)
|
||||||
return data.female;
|
return data.female;
|
||||||
@@ -48,14 +48,12 @@ public class HeroListData {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TextureRegion getAvatar(int heroRace, boolean isFemale, int avatarIndex) {
|
public TextureRegion getAvatar(int heroRace, boolean isFemale, int avatarIndex) {
|
||||||
if (instance == null)
|
HeroData data = instance().heroes[heroRace];
|
||||||
instance = read();
|
Array<Sprite> sprites = instance().avatarSprites.get(isFemale ? data.femaleAvatar : data.maleAvatar);
|
||||||
HeroData data = instance.heroes[heroRace];
|
|
||||||
Array<Sprite> sprites = instance.avatarSprites.get(isFemale ? data.femaleAvatar : data.maleAvatar);
|
|
||||||
if (sprites == null) {
|
if (sprites == null) {
|
||||||
sprites = instance.avatarAtlas.createSprites(isFemale ? data.femaleAvatar : data.maleAvatar);
|
sprites = instance().avatarAtlas.createSprites(isFemale ? data.femaleAvatar : data.maleAvatar);
|
||||||
instance.avatarSprites.put(isFemale ? data.femaleAvatar : data.maleAvatar, sprites);
|
instance().avatarSprites.put(isFemale ? data.femaleAvatar : data.maleAvatar, sprites);
|
||||||
}
|
}
|
||||||
avatarIndex %= sprites.size;
|
avatarIndex %= sprites.size;
|
||||||
if (avatarIndex < 0) {
|
if (avatarIndex < 0) {
|
||||||
@@ -64,11 +62,9 @@ public class HeroListData {
|
|||||||
return sprites.get(avatarIndex);
|
return sprites.get(avatarIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Array<String> getRaces() {
|
public Array<String> getRaces() {
|
||||||
if (instance == null)
|
|
||||||
instance = read();
|
|
||||||
Array<String> ret = new Array<>();
|
Array<String> ret = new Array<>();
|
||||||
for (HeroData hero : instance.heroes) {
|
for (HeroData hero : instance().heroes) {
|
||||||
ret.add(Forge.getLocalizer().getMessageorUseDefault("lbl"+hero.name, hero.name));
|
ret.add(Forge.getLocalizer().getMessageorUseDefault("lbl"+hero.name, hero.name));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -588,18 +588,18 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String spriteName() {
|
public String spriteName() {
|
||||||
return HeroListData.getHero(heroRace, isFemale);
|
return HeroListData.instance().getHero(heroRace, isFemale);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FileHandle sprite() {
|
public FileHandle sprite() {
|
||||||
return Config.instance().getFile(HeroListData.getHero(heroRace, isFemale));
|
return Config.instance().getFile(HeroListData.instance().getHero(heroRace, isFemale));
|
||||||
}
|
}
|
||||||
|
|
||||||
public TextureRegion avatar() {
|
public TextureRegion avatar() {
|
||||||
return HeroListData.getAvatar(heroRace, isFemale, avatarIndex);
|
return HeroListData.instance().getAvatar(heroRace, isFemale, avatarIndex);
|
||||||
}
|
}
|
||||||
public String raceName() {
|
public String raceName() {
|
||||||
return HeroListData.getRaces().get(Current.player().heroRace);
|
return HeroListData.instance().getRaces().get(Current.player().heroRace);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameStage getCurrentGameStage() {
|
public GameStage getCurrentGameStage() {
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ public class NewGameScene extends MenuScene {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
race.addListener(event -> NewGameScene.this.updateAvatar());
|
race.addListener(event -> NewGameScene.this.updateAvatar());
|
||||||
race.setTextList(HeroListData.getRaces());
|
race.setTextList(HeroListData.instance().getRaces());
|
||||||
difficulty = ui.findActor("difficulty");
|
difficulty = ui.findActor("difficulty");
|
||||||
difficultyHelp = ui.findActor("difficultyHelp");
|
difficultyHelp = ui.findActor("difficultyHelp");
|
||||||
|
|
||||||
@@ -294,7 +294,7 @@ public class NewGameScene extends MenuScene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean updateAvatar() {
|
private boolean updateAvatar() {
|
||||||
avatarImage.setDrawable(new TextureRegionDrawable(HeroListData.getAvatar(race.getCurrentIndex(), gender.getCurrentIndex() != 0, avatarIndex)));
|
avatarImage.setDrawable(new TextureRegionDrawable(HeroListData.instance().getAvatar(race.getCurrentIndex(), gender.getCurrentIndex() != 0, avatarIndex)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -144,9 +144,7 @@ public class ConsoleCommandInterpreter {
|
|||||||
Forge.advFreezePlayerControls = false;
|
Forge.advFreezePlayerControls = false;
|
||||||
WorldStage.getInstance().setPosition(new Vector2(poi.getPosition().x - 16f, poi.getPosition().y + 16f));
|
WorldStage.getInstance().setPosition(new Vector2(poi.getPosition().x - 16f, poi.getPosition().y + 16f));
|
||||||
WorldStage.getInstance().loadPOI(poi);
|
WorldStage.getInstance().loadPOI(poi);
|
||||||
WorldSave.getCurrentSave().autoSave();
|
|
||||||
Forge.clearTransitionScreen();
|
Forge.clearTransitionScreen();
|
||||||
//WorldStage.getInstance().player.playEffect(Paths.EFFECT_TELEPORT, 10);
|
|
||||||
}, Forge.takeScreenshot())));
|
}, Forge.takeScreenshot())));
|
||||||
return "Teleported to " + s[0] + "(" + poi.getPosition() + ")";
|
return "Teleported to " + s[0] + "(" + poi.getPosition() + ")";
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -4,12 +4,14 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
|||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
import forge.Graphics;
|
import forge.Graphics;
|
||||||
import forge.animation.ForgeAnimation;
|
import forge.animation.ForgeAnimation;
|
||||||
|
import forge.assets.FSkin;
|
||||||
|
import forge.assets.FSkinTexture;
|
||||||
import forge.gui.FThreads;
|
import forge.gui.FThreads;
|
||||||
|
|
||||||
public class CoverScreen extends TransitionScreen {
|
public class CoverScreen extends TransitionScreen {
|
||||||
private CoverAnimation coverAnimation;
|
private CoverAnimation coverAnimation;
|
||||||
Runnable runnable;
|
private Runnable runnable;
|
||||||
TextureRegion textureRegion;
|
private TextureRegion textureRegion;
|
||||||
|
|
||||||
public CoverScreen(Runnable r, TextureRegion t) {
|
public CoverScreen(Runnable r, TextureRegion t) {
|
||||||
runnable = r;
|
runnable = r;
|
||||||
@@ -18,19 +20,22 @@ public class CoverScreen extends TransitionScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class CoverAnimation extends ForgeAnimation {
|
private class CoverAnimation extends ForgeAnimation {
|
||||||
float DURATION = 0.6f;
|
float DURATION = 0.8f;
|
||||||
private float progress = 0;
|
private float progress = 0;
|
||||||
|
|
||||||
public void drawBackground(Graphics g) {
|
public void drawBackground(Graphics g) {
|
||||||
|
float oldAlpha = g.getfloatAlphaComposite();
|
||||||
float percentage = progress / DURATION;
|
float percentage = progress / DURATION;
|
||||||
if (percentage < 0) {
|
if (percentage < 0) {
|
||||||
percentage = 0;
|
percentage = 0;
|
||||||
} else if (percentage > 1) {
|
} else if (percentage > 1) {
|
||||||
percentage = 1;
|
percentage = 1;
|
||||||
}
|
}
|
||||||
if (textureRegion != null) {
|
g.setAlphaComposite(percentage);
|
||||||
g.drawPortalFade(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), Math.min(percentage, 1f), true);
|
g.drawImage(Forge.isMobileAdventureMode ? FSkinTexture.ADV_BG_TEXTURE : FSkinTexture.BG_TEXTURE, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight());
|
||||||
}
|
g.drawImage(FSkin.getLogo(), Forge.getScreenWidth() / 2f - FSkin.getLogo().getWidth() / 2f, Forge.getScreenHeight() / 2f - FSkin.getLogo().getHeight() / 2f, FSkin.getLogo().getWidth(), FSkin.getLogo().getHeight());
|
||||||
|
g.setAlphaComposite(oldAlpha);
|
||||||
|
g.drawPortalFade(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), Math.min(percentage, 1f), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user