Merge branch 'master' into 'master'

[Adventure] Adjust Map & Avatar Size for Portrait Mode

See merge request core-developers/forge!6327
This commit is contained in:
Anthony Calosa
2022-03-02 11:39:26 +00:00
3 changed files with 86 additions and 54 deletions

View File

@@ -335,17 +335,21 @@ public class GameHUD extends Stage {
miniMap.setWidth(160); miniMap.setWidth(160);
mapborder.setWidth(160); mapborder.setWidth(160);
miniMapPlayer.setWidth(10); miniMapPlayer.setWidth(10);
miniMap.setHeight(70);
mapborder.setHeight(70);
miniMapPlayer.setHeight(4);
gamehud.setVisible(false); gamehud.setVisible(false);
blank.setScaleX(2); blank.setScaleX(2);
blank.setX(388); blank.setX(388);
blank.setHeight(80); blank.setHeight(70);
blank.setY(miniMap.getY()); blank.setY(miniMap.getY());
avatar.setScaleX(2); avatar.setScaleX(2);
avatar.setX(388); avatar.setX(388);
avatar.setHeight(36);
avatarborder.setX(388); avatarborder.setX(388);
avatarborder.setY(miniMap.getY()); avatarborder.setY(miniMap.getY());
avatarborder.setScaleX(2); avatarborder.setScaleX(2);
avatarborder.setHeight(80); avatarborder.setHeight(70);
money.setX(418); money.setX(418);
lifePoints.setX(418); lifePoints.setX(418);
lifePoints.setY(avatar.getY()-15); lifePoints.setY(avatar.getY()-15);

View File

@@ -2,6 +2,7 @@ package forge.adventure.util;
import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Group; import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputEvent;
@@ -19,6 +20,7 @@ import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json; import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.ObjectMap; import com.badlogic.gdx.utils.ObjectMap;
import com.badlogic.gdx.utils.OrderedMap; import com.badlogic.gdx.utils.OrderedMap;
import forge.Forge;
import forge.adventure.data.UIData; import forge.adventure.data.UIData;
/** /**
@@ -36,12 +38,9 @@ public class UIActor extends Group {
for (OrderedMap<String, String> element : new Array.ArrayIterator<>(data.elements)) { for (OrderedMap<String, String> element : new Array.ArrayIterator<>(data.elements)) {
String type = element.get("type"); String type = element.get("type");
Actor newActor; Actor newActor;
if(type==null) if (type == null) {
{ newActor = new Actor();
newActor=new Actor(); } else {
}
else
{
switch (type) { switch (type) {
case "Selector": case "Selector":
newActor = new Selector(); newActor = new Selector();
@@ -49,35 +48,35 @@ public class UIActor extends Group {
break; break;
case "Label": case "Label":
newActor = new Label("", Controls.GetSkin()); newActor = new Label("", Controls.GetSkin());
readLabelProperties((Label) newActor, new OrderedMap.OrderedMapEntries<>(element)); readLabelProperties((Label) newActor, new OrderedMap.OrderedMapEntries<>(element));
break; break;
case "Table": case "Table":
newActor = new Table(Controls.GetSkin()); newActor = new Table(Controls.GetSkin());
readTableProperties((Table) newActor, new OrderedMap.OrderedMapEntries<>(element)); readTableProperties((Table) newActor, new OrderedMap.OrderedMapEntries<>(element));
break; break;
case "Image": case "Image":
newActor = new Image(); newActor = new Image();
readImageProperties((Image) newActor, new OrderedMap.OrderedMapEntries<>(element)); readImageProperties((Image) newActor, new OrderedMap.OrderedMapEntries<>(element));
break; break;
case "ImageButton": case "ImageButton":
newActor = new ImageButton(Controls.GetSkin()); newActor = new ImageButton(Controls.GetSkin());
readImageButtonProperties((ImageButton) newActor, new OrderedMap.OrderedMapEntries<>(element)); readImageButtonProperties((ImageButton) newActor, new OrderedMap.OrderedMapEntries<>(element));
break; break;
case "Window": case "Window":
newActor = new Window("", Controls.GetSkin()); newActor = new Window("", Controls.GetSkin());
readWindowProperties((Window) newActor, new OrderedMap.OrderedMapEntries<>(element)); readWindowProperties((Window) newActor, new OrderedMap.OrderedMapEntries<>(element));
break; break;
case "TextButton": case "TextButton":
newActor = new TextButton("", Controls.GetSkin()); newActor = new TextButton("", Controls.GetSkin());
readButtonProperties((TextButton) newActor, new OrderedMap.OrderedMapEntries<>(element)); readButtonProperties((TextButton) newActor, new OrderedMap.OrderedMapEntries<>(element));
break; break;
case "TextField": case "TextField":
newActor = new TextField("", Controls.GetSkin()); newActor = new TextField("", Controls.GetSkin());
readTextFieldProperties((TextField) newActor, new OrderedMap.OrderedMapEntries<>(element)); readTextFieldProperties((TextField) newActor, new OrderedMap.OrderedMapEntries<>(element));
break; break;
case "Scroll": case "Scroll":
newActor = new ScrollPane(null, Controls.GetSkin()); newActor = new ScrollPane(null, Controls.GetSkin());
readScrollPaneProperties((ScrollPane) newActor, new OrderedMap.OrderedMapEntries<>(element)); readScrollPaneProperties((ScrollPane) newActor, new OrderedMap.OrderedMapEntries<>(element));
break; break;
default: default:
throw new IllegalStateException("Unexpected value: " + type); throw new IllegalStateException("Unexpected value: " + type);
@@ -85,7 +84,7 @@ public class UIActor extends Group {
} }
//load Actor Properties //load Actor Properties
float yValue = 0; float yValue = 0;
for (ObjectMap.Entry property : new OrderedMap.OrderedMapEntries<>(element)) { for (ObjectMap.Entry property : new OrderedMap.OrderedMapEntries<>(element)) {
switch (property.key.toString()) { switch (property.key.toString()) {
case "width": case "width":
newActor.setWidth((Float) property.value); newActor.setWidth((Float) property.value);
@@ -112,7 +111,7 @@ public class UIActor extends Group {
} }
private void readScrollPaneProperties(ScrollPane newActor, ObjectMap.Entries<String, String> entries) { private void readScrollPaneProperties(ScrollPane newActor, ObjectMap.Entries<String, String> entries) {
newActor.setActor(new Label("",Controls.GetSkin())); newActor.setActor(new Label("", Controls.GetSkin()));
for (ObjectMap.Entry property : entries) { for (ObjectMap.Entry property : entries) {
switch (property.key.toString()) { switch (property.key.toString()) {
case "style": case "style":
@@ -121,6 +120,7 @@ public class UIActor extends Group {
} }
} }
} }
private void readWindowProperties(Window newActor, ObjectMap.Entries<String, String> entries) { private void readWindowProperties(Window newActor, ObjectMap.Entries<String, String> entries) {
for (ObjectMap.Entry property : entries) { for (ObjectMap.Entry property : entries) {
switch (property.key.toString()) { switch (property.key.toString()) {
@@ -196,7 +196,15 @@ public class UIActor extends Group {
for (ObjectMap.Entry property : entries) { for (ObjectMap.Entry property : entries) {
switch (property.key.toString()) { switch (property.key.toString()) {
case "image": case "image":
newActor.setDrawable(new TextureRegionDrawable(new Texture(Config.instance().getFile(property.value.toString())))); Texture t = new Texture(Config.instance().getFile(property.value.toString()));
TextureRegion tr = new TextureRegion(t);
if (!Forge.isLandscapeMode() && t.toString().contains("title_bg.png")) {
float ar = 1.78f;
int w = (int) (tr.getRegionHeight() / ar);
int x = (int) ((tr.getRegionWidth() - w) / ar);
tr.setRegion(x, 0, w, tr.getRegionHeight());
}
newActor.setDrawable(new TextureRegionDrawable(tr));
break; break;
} }
} }

View File

@@ -41,6 +41,7 @@ public class SplashScreen extends FContainer {
public void setBackground(TextureRegion background0) { public void setBackground(TextureRegion background0) {
background = background0; background = background0;
} }
public void startClassic() { public void startClassic() {
startClassic = true; startClassic = true;
hideBtn = true; hideBtn = true;
@@ -56,26 +57,28 @@ public class SplashScreen extends FContainer {
//prepare for showing dialogs on top of splash screen if needed //prepare for showing dialogs on top of splash screen if needed
public void prepareForDialogs() { public void prepareForDialogs() {
if (preparedForDialogs) { return; } if (preparedForDialogs) {
return;
}
//establish fallback colors for before actual colors are loaded //establish fallback colors for before actual colors are loaded
Color defaultColor = new Color(0, 0, 0, 0); Color defaultColor = new Color(0, 0, 0, 0);
for (final FSkinColor.Colors c : FSkinColor.Colors.values()) { for (final FSkinColor.Colors c : FSkinColor.Colors.values()) {
switch (c) { switch (c) {
case CLR_BORDERS: case CLR_BORDERS:
case CLR_TEXT: case CLR_TEXT:
c.setColor(FProgressBar.SEL_FORE_COLOR); c.setColor(FProgressBar.SEL_FORE_COLOR);
break; break;
case CLR_ACTIVE: case CLR_ACTIVE:
case CLR_THEME2: case CLR_THEME2:
c.setColor(FProgressBar.SEL_BACK_COLOR); c.setColor(FProgressBar.SEL_BACK_COLOR);
break; break;
case CLR_INACTIVE: case CLR_INACTIVE:
c.setColor(FSkinColor.stepColor(FProgressBar.SEL_BACK_COLOR, -80)); c.setColor(FSkinColor.stepColor(FProgressBar.SEL_BACK_COLOR, -80));
break; break;
default: default:
c.setColor(defaultColor); c.setColor(defaultColor);
break; break;
} }
} }
FSkinColor.updateAll(); FSkinColor.updateAll();
@@ -85,6 +88,7 @@ public class SplashScreen extends FContainer {
public void setShowModeSelector(boolean value) { public void setShowModeSelector(boolean value) {
showModeSelector = value; showModeSelector = value;
} }
public boolean isShowModeSelector() { public boolean isShowModeSelector() {
return showModeSelector; return showModeSelector;
} }
@@ -94,7 +98,9 @@ public class SplashScreen extends FContainer {
private float progress = 0; private float progress = 0;
private boolean finished, openAdventure; private boolean finished, openAdventure;
//for transition image only... //for transition image only...
Texture transition_bg = new Texture(GuiBase.isAndroid() ? Gdx.files.internal("fallback_skin").child("title_bg_lq.png") : Gdx.files.classpath("fallback_skin").child("title_bg_lq.png")); TextureRegion transition_bg = new TextureRegion(new Texture(GuiBase.isAndroid()
? Gdx.files.internal("fallback_skin").child("title_bg_lq.png")
: Gdx.files.classpath("fallback_skin").child("title_bg_lq.png")));
public void drawBackground(Graphics g) { public void drawBackground(Graphics g) {
float percentage = progress / DURATION; float percentage = progress / DURATION;
@@ -105,22 +111,22 @@ public class SplashScreen extends FContainer {
percentage = 1; percentage = 1;
} }
if (startClassic) { if (startClassic) {
showSplash(g, 1-percentage); showSplash(g, 1 - percentage);
} else { } else {
if (animateLogo) { if (animateLogo) {
//bg //bg
drawTransition(g, transition_bg, openAdventure, percentage); drawTransition(g, transition_bg, openAdventure, percentage);
g.setAlphaComposite(1-percentage); g.setAlphaComposite(1 - percentage);
g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, getWidth(), getHeight()); g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, getWidth(), getHeight());
g.setAlphaComposite(oldAlpha); g.setAlphaComposite(oldAlpha);
//logo //logo
g.setAlphaComposite(oldAlpha-percentage); g.setAlphaComposite(oldAlpha - percentage);
float xmod = Forge.getScreenHeight() > 1000 ? 1.5f : Forge.getScreenHeight() > 800 ? 1.3f : 1f; float xmod = Forge.getScreenHeight() > 1000 ? 1.5f : Forge.getScreenHeight() > 800 ? 1.3f : 1f;
xmod += 10 * percentage; xmod += 10 * percentage;
g.drawImage(FSkin.hdLogo, getWidth()/2 - (FSkin.hdLogo.getWidth()*xmod)/2, getHeight()/2 - (FSkin.hdLogo.getHeight()*xmod)/1.5f, FSkin.hdLogo.getWidth()*xmod, FSkin.hdLogo.getHeight()*xmod); g.drawImage(FSkin.hdLogo, getWidth() / 2 - (FSkin.hdLogo.getWidth() * xmod) / 2, getHeight() / 2 - (FSkin.hdLogo.getHeight() * xmod) / 1.5f, FSkin.hdLogo.getWidth() * xmod, FSkin.hdLogo.getHeight() * xmod);
g.setAlphaComposite(oldAlpha); g.setAlphaComposite(oldAlpha);
} else { } else {
g.setAlphaComposite(hideBG ? 1-percentage : 1); g.setAlphaComposite(hideBG ? 1 - percentage : 1);
if (showModeSelector) { if (showModeSelector) {
showSelector(g, hideBG ? 1 - percentage : 1); showSelector(g, hideBG ? 1 - percentage : 1);
} else { } else {
@@ -128,7 +134,7 @@ public class SplashScreen extends FContainer {
} }
g.setAlphaComposite(oldAlpha); g.setAlphaComposite(oldAlpha);
if (hideBG) { if (hideBG) {
g.setAlphaComposite(0+percentage); g.setAlphaComposite(0 + percentage);
drawTransition(g, transition_bg, openAdventure, percentage); drawTransition(g, transition_bg, openAdventure, percentage);
g.setAlphaComposite(oldAlpha); g.setAlphaComposite(oldAlpha);
} }
@@ -137,11 +143,11 @@ public class SplashScreen extends FContainer {
if (hideBtn) { if (hideBtn) {
if (btnAdventure != null) { if (btnAdventure != null) {
float y = btnAdventure.getTop(); float y = btnAdventure.getTop();
btnAdventure.setTop(y+(getHeight()/16 * percentage)); btnAdventure.setTop(y + (getHeight() / 16 * percentage));
} }
if (btnHome != null) { if (btnHome != null) {
float y = btnHome.getTop(); float y = btnHome.getTop();
btnHome.setTop(y+(getHeight()/16 * percentage)); btnHome.setTop(y + (getHeight() / 16 * percentage));
} }
} }
} }
@@ -154,7 +160,7 @@ public class SplashScreen extends FContainer {
@Override @Override
protected void onEnd(boolean endingAll) { protected void onEnd(boolean endingAll) {
if (animateLogo||hideBG) { if (animateLogo || hideBG) {
if (openAdventure) if (openAdventure)
Forge.openAdventure(); Forge.openAdventure();
else else
@@ -169,20 +175,31 @@ public class SplashScreen extends FContainer {
bgAnimation.start(); bgAnimation.start();
bgAnimation.drawBackground(g); bgAnimation.drawBackground(g);
} }
void drawTransition(Graphics g, Texture bg, boolean openAdventure, float percentage) {
void drawTransition(Graphics g, TextureRegion bg, boolean openAdventure, float percentage) {
TextureRegion tr = new TextureRegion(bg.getTexture());
if (!Forge.isLandscapeMode() && tr != null) {
float ar = 1.78f;
int w = (int) (tr.getRegionHeight() / ar);
int x = (int) ((tr.getRegionWidth() - w) / ar);
tr.setRegion(x, 0, w, tr.getRegionHeight());
}
float oldAlpha = g.getfloatAlphaComposite(); float oldAlpha = g.getfloatAlphaComposite();
g.setAlphaComposite(percentage); g.setAlphaComposite(percentage);
if (openAdventure) { if (openAdventure) {
if (bg != null) { if (tr != null) {
g.drawGrayTransitionImage(bg, 0, 0, getWidth(), getHeight(), false, percentage*1); g.drawGrayTransitionImage(tr, 0, 0, getWidth(), getHeight(), false, percentage * 1);
} }
} else { } else {
g.fillRect(FSkinColor.get(FSkinColor.Colors.CLR_THEME),0, 0, getWidth(), getHeight()); g.fillRect(FSkinColor.get(FSkinColor.Colors.CLR_THEME), 0, 0, getWidth(), getHeight());
} }
g.setAlphaComposite(oldAlpha); g.setAlphaComposite(oldAlpha);
} }
private void showSelector(Graphics g, float alpha) { private void showSelector(Graphics g, float alpha) {
if (background == null) { return; } if (background == null) {
return;
}
g.fillRect(Color.BLACK, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight()); g.fillRect(Color.BLACK, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight());
g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, getWidth(), getHeight()); g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, getWidth(), getHeight());
@@ -194,8 +211,7 @@ public class SplashScreen extends FContainer {
w = getWidth(); w = getWidth();
h = getWidth() * backgroundRatio; h = getWidth() * backgroundRatio;
y = (getHeight() - h) / 2; y = (getHeight() - h) / 2;
} } else {
else {
y = 0; y = 0;
h = getHeight(); h = getHeight();
w = getHeight() / backgroundRatio; w = getHeight() / backgroundRatio;
@@ -203,7 +219,7 @@ public class SplashScreen extends FContainer {
} }
if (FSkin.hdLogo != null) { if (FSkin.hdLogo != null) {
float xmod = Forge.getScreenHeight() > 1000 ? 1.5f : Forge.getScreenHeight() > 800 ? 1.3f : 1f; float xmod = Forge.getScreenHeight() > 1000 ? 1.5f : Forge.getScreenHeight() > 800 ? 1.3f : 1f;
g.drawImage(FSkin.hdLogo, getWidth()/2 - (FSkin.hdLogo.getWidth()*xmod)/2, getHeight()/2 - (FSkin.hdLogo.getHeight()*xmod)/1.5f, FSkin.hdLogo.getWidth()*xmod, FSkin.hdLogo.getHeight()*xmod); g.drawImage(FSkin.hdLogo, getWidth() / 2 - (FSkin.hdLogo.getWidth() * xmod) / 2, getHeight() / 2 - (FSkin.hdLogo.getHeight() * xmod) / 1.5f, FSkin.hdLogo.getWidth() * xmod, FSkin.hdLogo.getHeight() * xmod);
} else { } else {
g.drawImage(background, x, y, w, h); g.drawImage(background, x, y, w, h);
} }
@@ -255,18 +271,22 @@ public class SplashScreen extends FContainer {
btnAdventure.setFont(FSkinFont.get(22)); btnAdventure.setFont(FSkinFont.get(22));
btnHome.setBounds(btn_x, btn_y, btn_w, height); btnHome.setBounds(btn_x, btn_y, btn_w, height);
add(btnHome); add(btnHome);
btnAdventure.setBounds(btn_x, btn_y+height+padding/2, btn_w, height); btnAdventure.setBounds(btn_x, btn_y + height + padding / 2, btn_w, height);
add(btnAdventure); add(btnAdventure);
} }
} }
private void showSplash(Graphics g, float alpha) { private void showSplash(Graphics g, float alpha) {
float oldAlpha = g.getfloatAlphaComposite(); float oldAlpha = g.getfloatAlphaComposite();
g.setAlphaComposite(alpha); g.setAlphaComposite(alpha);
drawDisclaimer(g); drawDisclaimer(g);
g.setAlphaComposite(oldAlpha); g.setAlphaComposite(oldAlpha);
} }
void drawDisclaimer(Graphics g) { void drawDisclaimer(Graphics g) {
if (background == null) { return; } if (background == null) {
return;
}
g.fillRect(Color.BLACK, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight()); g.fillRect(Color.BLACK, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight());
g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, getWidth(), getHeight()); g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, getWidth(), getHeight());