refactor HeroListData, update CoverScreen

- remove redundant autosave
This commit is contained in:
Anthony Calosa
2024-11-03 21:24:20 +08:00
parent 2d85fd845e
commit 87d242028f
5 changed files with 40 additions and 41 deletions

View File

@@ -18,29 +18,29 @@ import forge.adventure.util.Paths;
*/
public class HeroListData {
static private HeroListData instance;
public HeroData[] heroes;
public String avatar;
private HeroData[] heroes;
private String avatar;
private TextureAtlas avatarAtlas;
private final ObjectMap<String, Array<Sprite>> avatarSprites = new ObjectMap<>();
static private HeroListData read() {
Json json = new Json();
FileHandle handle = Config.instance().getFile(Paths.HEROES);
if (handle.exists()) {
instance = json.fromJson(HeroListData.class, handle);
instance.avatarAtlas = Config.instance().getAtlas(instance.avatar);
/*
instance.avatarSprites.getTextures().first().setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest);
*/
static public HeroListData instance() {
if (instance == null) {
Json json = new Json();
FileHandle handle = Config.instance().getFile(Paths.HEROES);
if (handle.exists()) {
instance = json.fromJson(HeroListData.class, handle);
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);*/
} else {
throw new RuntimeException("Path not found: " + handle.path());
}
}
return instance;
}
static public String getHero(int raceIndex, boolean female) {
if (instance == null)
instance = read();
HeroData data = instance.heroes[raceIndex];
public String getHero(int raceIndex, boolean female) {
HeroData data = instance().heroes[raceIndex];
if (female)
return data.female;
@@ -48,14 +48,12 @@ public class HeroListData {
}
public static TextureRegion getAvatar(int heroRace, boolean isFemale, int avatarIndex) {
if (instance == null)
instance = read();
HeroData data = instance.heroes[heroRace];
Array<Sprite> sprites = instance.avatarSprites.get(isFemale ? data.femaleAvatar : data.maleAvatar);
public TextureRegion getAvatar(int heroRace, boolean isFemale, int avatarIndex) {
HeroData data = instance().heroes[heroRace];
Array<Sprite> sprites = instance().avatarSprites.get(isFemale ? data.femaleAvatar : data.maleAvatar);
if (sprites == null) {
sprites = instance.avatarAtlas.createSprites(isFemale ? data.femaleAvatar : data.maleAvatar);
instance.avatarSprites.put(isFemale ? data.femaleAvatar : data.maleAvatar, sprites);
sprites = instance().avatarAtlas.createSprites(isFemale ? data.femaleAvatar : data.maleAvatar);
instance().avatarSprites.put(isFemale ? data.femaleAvatar : data.maleAvatar, sprites);
}
avatarIndex %= sprites.size;
if (avatarIndex < 0) {
@@ -64,11 +62,9 @@ public class HeroListData {
return sprites.get(avatarIndex);
}
public static Array<String> getRaces() {
if (instance == null)
instance = read();
public Array<String> getRaces() {
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));
}
return ret;

View File

@@ -588,18 +588,18 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
}
public String spriteName() {
return HeroListData.getHero(heroRace, isFemale);
return HeroListData.instance().getHero(heroRace, isFemale);
}
public FileHandle sprite() {
return Config.instance().getFile(HeroListData.getHero(heroRace, isFemale));
return Config.instance().getFile(HeroListData.instance().getHero(heroRace, isFemale));
}
public TextureRegion avatar() {
return HeroListData.getAvatar(heroRace, isFemale, avatarIndex);
return HeroListData.instance().getAvatar(heroRace, isFemale, avatarIndex);
}
public String raceName() {
return HeroListData.getRaces().get(Current.player().heroRace);
return HeroListData.instance().getRaces().get(Current.player().heroRace);
}
public GameStage getCurrentGameStage() {

View File

@@ -169,7 +169,7 @@ public class NewGameScene extends MenuScene {
}
});
race.addListener(event -> NewGameScene.this.updateAvatar());
race.setTextList(HeroListData.getRaces());
race.setTextList(HeroListData.instance().getRaces());
difficulty = ui.findActor("difficulty");
difficultyHelp = ui.findActor("difficultyHelp");
@@ -294,7 +294,7 @@ public class NewGameScene extends MenuScene {
}
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;
}

View File

@@ -144,9 +144,7 @@ public class ConsoleCommandInterpreter {
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() + ")";
});

View File

@@ -4,12 +4,14 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion;
import forge.Forge;
import forge.Graphics;
import forge.animation.ForgeAnimation;
import forge.assets.FSkin;
import forge.assets.FSkinTexture;
import forge.gui.FThreads;
public class CoverScreen extends TransitionScreen {
private CoverAnimation coverAnimation;
Runnable runnable;
TextureRegion textureRegion;
private Runnable runnable;
private TextureRegion textureRegion;
public CoverScreen(Runnable r, TextureRegion t) {
runnable = r;
@@ -18,19 +20,22 @@ public class CoverScreen extends TransitionScreen {
}
private class CoverAnimation extends ForgeAnimation {
float DURATION = 0.6f;
float DURATION = 0.8f;
private float progress = 0;
public void drawBackground(Graphics g) {
float oldAlpha = g.getfloatAlphaComposite();
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);
}
g.setAlphaComposite(percentage);
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