Merge pull request #6523 from kevlahnota/master2

refactor HeroListData, update CoverScreen
This commit is contained in:
kevlahnota
2024-11-03 21:29:06 +08:00
committed by GitHub
5 changed files with 40 additions and 41 deletions

View File

@@ -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;

View File

@@ -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() {

View File

@@ -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;
} }

View File

@@ -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() + ")";
}); });

View File

@@ -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