Some small updates, fix shimmering portal render

This commit is contained in:
Retera 2022-06-02 01:13:26 -04:00
parent d7cad72100
commit c5b61afa28
11 changed files with 101 additions and 37 deletions

View File

@ -135,7 +135,7 @@ public class WarsmashGdxFDFTestRenderScreen implements InputProcessor, Screen, S
this.uiViewport = new FitViewport(aspect3By4Width, aspect3By4Height, this.uiCamera); this.uiViewport = new FitViewport(aspect3By4Width, aspect3By4Height, this.uiCamera);
this.uiViewport.update(width, height); this.uiViewport.update(width, height);
this.uiCamera.position.set(this.getMinWorldWidth() / 2, this.getMinWorldHeight() / 2, 0); this.uiCamera.position.set(getMinWorldWidth() / 2, getMinWorldHeight() / 2, 0);
this.uiCamera.update(); this.uiCamera.update();
this.batch = new SpriteBatch(); this.batch = new SpriteBatch();
@ -166,8 +166,7 @@ public class WarsmashGdxFDFTestRenderScreen implements InputProcessor, Screen, S
// WarsmashGdxMapGame.this.viewer.setGameUI(rootFrame); // WarsmashGdxMapGame.this.viewer.setGameUI(rootFrame);
if (WarsmashConstants.ENABLE_MUSIC) { if (WarsmashConstants.ENABLE_MUSIC) {
final String musicField = rootFrame final String musicField = rootFrame.getSkinField("GlueMusic");
.getSkinField("GlueMusic_V" + WarsmashConstants.GAME_VERSION);
final String[] musics = musicField.split(";"); final String[] musics = musicField.split(";");
String musicPath = musics[(int) (Math.random() * musics.length)]; String musicPath = musics[(int) (Math.random() * musics.length)];
if (musicSLK.get(musicPath) != null) { if (musicSLK.get(musicPath) != null) {
@ -184,11 +183,9 @@ public class WarsmashGdxFDFTestRenderScreen implements InputProcessor, Screen, S
WarsmashGdxFDFTestRenderScreen.this.currentMusic = music; WarsmashGdxFDFTestRenderScreen.this.currentMusic = music;
} }
WarsmashGdxFDFTestRenderScreen.this WarsmashGdxFDFTestRenderScreen.this.singleModelScene(
.singleModelScene(WarsmashGdxFDFTestRenderScreen.this.scene, WarsmashGdxFDFTestRenderScreen.this.scene,
War3MapViewer.mdx(rootFrame.getSkinField( War3MapViewer.mdx(rootFrame.getSkinField("GlueSpriteLayerBackground")), "Stand");
"GlueSpriteLayerBackground_V" + WarsmashConstants.GAME_VERSION)),
"Stand");
WarsmashGdxFDFTestRenderScreen.this.modelCamera = WarsmashGdxFDFTestRenderScreen.this.mainModel.cameras WarsmashGdxFDFTestRenderScreen.this.modelCamera = WarsmashGdxFDFTestRenderScreen.this.mainModel.cameras
.get(0); .get(0);
} }
@ -200,9 +197,9 @@ public class WarsmashGdxFDFTestRenderScreen implements InputProcessor, Screen, S
libgdxContentInstance.setScene(this.uiScene); libgdxContentInstance.setScene(this.uiScene);
this.menuUI.main(); this.menuUI.main();
this.updateUIScene(); updateUIScene();
this.resize(width, height); resize(width, height);
} }
Gdx.input.setInputProcessor(this); Gdx.input.setInputProcessor(this);
@ -234,8 +231,8 @@ public class WarsmashGdxFDFTestRenderScreen implements InputProcessor, Screen, S
this.uiScene.camera.viewport(this.tempRect); this.uiScene.camera.viewport(this.tempRect);
final float worldWidth = this.uiViewport.getWorldWidth(); final float worldWidth = this.uiViewport.getWorldWidth();
final float worldHeight = this.uiViewport.getWorldHeight(); final float worldHeight = this.uiViewport.getWorldHeight();
final float xScale = worldWidth / this.getMinWorldWidth(); final float xScale = worldWidth / getMinWorldWidth();
final float yScale = worldHeight / this.getMinWorldHeight(); final float yScale = worldHeight / getMinWorldHeight();
final float uiSceneWidth = 0.8f * xScale; final float uiSceneWidth = 0.8f * xScale;
final float uiSceneHeight = 0.6f * yScale; final float uiSceneHeight = 0.6f * yScale;
final float uiSceneX = (0.8f - uiSceneWidth) / 2; final float uiSceneX = (0.8f - uiSceneWidth) / 2;
@ -251,7 +248,7 @@ public class WarsmashGdxFDFTestRenderScreen implements InputProcessor, Screen, S
return new SolvedPath(src, src.substring(src.lastIndexOf('.')), true); return new SolvedPath(src, src.substring(src.lastIndexOf('.')), true);
} }
}, null); }, null);
this.makePerfectSquare(scene, model2, 15); makePerfectSquare(scene, model2, 15);
} }
private void singleAcolyteScene(final Scene scene) { private void singleAcolyteScene(final Scene scene) {
@ -314,7 +311,7 @@ public class WarsmashGdxFDFTestRenderScreen implements InputProcessor, Screen, S
this.mainModel = null; this.mainModel = null;
} }
else { else {
this.singleModelScene(this.scene, War3MapViewer.mdx(path), "birth"); singleModelScene(this.scene, War3MapViewer.mdx(path), "birth");
WarsmashGdxFDFTestRenderScreen.this.modelCamera = WarsmashGdxFDFTestRenderScreen.this.mainModel.cameras WarsmashGdxFDFTestRenderScreen.this.modelCamera = WarsmashGdxFDFTestRenderScreen.this.mainModel.cameras
.get(0); .get(0);
// this hack is because we only have the queued animation system in RenderWidget // this hack is because we only have the queued animation system in RenderWidget
@ -569,10 +566,10 @@ public class WarsmashGdxFDFTestRenderScreen implements InputProcessor, Screen, S
// super.resize(width, height); // super.resize(width, height);
this.uiViewport.update(width, height); this.uiViewport.update(width, height);
this.uiCamera.position.set(this.getMinWorldWidth() / 2, this.getMinWorldHeight() / 2, 0); this.uiCamera.position.set(getMinWorldWidth() / 2, getMinWorldHeight() / 2, 0);
this.menuUI.resize(); this.menuUI.resize();
this.updateUIScene(); updateUIScene();
} }
@ -615,7 +612,7 @@ public class WarsmashGdxFDFTestRenderScreen implements InputProcessor, Screen, S
this.quatHeap = new Quaternion(); this.quatHeap = new Quaternion();
this.quatHeap2 = new Quaternion(); this.quatHeap2 = new Quaternion();
this.updateCamera(); updateCamera();
// cameraUpdate(); // cameraUpdate();
} }
@ -793,7 +790,7 @@ public class WarsmashGdxFDFTestRenderScreen implements InputProcessor, Screen, S
@Override @Override
public void renderTranslucent() { public void renderTranslucent() {
WarsmashGdxFDFTestRenderScreen.this.renderLibGDXContent(); renderLibGDXContent();
} }
@Override @Override

View File

@ -31,7 +31,6 @@ import com.etheller.warsmash.units.DataTable;
import com.etheller.warsmash.units.Element; import com.etheller.warsmash.units.Element;
import com.etheller.warsmash.util.ImageUtils; import com.etheller.warsmash.util.ImageUtils;
import com.etheller.warsmash.util.StringBundle; import com.etheller.warsmash.util.StringBundle;
import com.etheller.warsmash.util.WarsmashConstants;
import com.etheller.warsmash.viewer5.Camera; import com.etheller.warsmash.viewer5.Camera;
import com.etheller.warsmash.viewer5.CanvasProvider; import com.etheller.warsmash.viewer5.CanvasProvider;
import com.etheller.warsmash.viewer5.Model; import com.etheller.warsmash.viewer5.Model;
@ -207,9 +206,8 @@ public class WarsmashGdxMenuScreen implements InputProcessor, Screen, SingleMode
public void onCreate(final GameUI rootFrame) { public void onCreate(final GameUI rootFrame) {
// WarsmashGdxMapGame.this.viewer.setGameUI(rootFrame); // WarsmashGdxMapGame.this.viewer.setGameUI(rootFrame);
singleModelScene(WarsmashGdxMenuScreen.this.scene, War3MapViewer.mdx(rootFrame singleModelScene(WarsmashGdxMenuScreen.this.scene,
.getSkinField("GlueSpriteLayerBackground_V" + WarsmashConstants.GAME_VERSION)), War3MapViewer.mdx(rootFrame.getSkinField("GlueSpriteLayerBackground")), "Stand");
"Stand");
if (!WarsmashGdxMenuScreen.this.mainModel.cameras.isEmpty()) { if (!WarsmashGdxMenuScreen.this.mainModel.cameras.isEmpty()) {
WarsmashGdxMenuScreen.this.modelCamera = WarsmashGdxMenuScreen.this.mainModel.cameras WarsmashGdxMenuScreen.this.modelCamera = WarsmashGdxMenuScreen.this.mainModel.cameras
.get(0); .get(0);

View File

@ -22,6 +22,9 @@ public class SingleStringFrame extends AbstractRenderableFrame {
public SingleStringFrame(final String name, final UIFrame parent, final Color color, final TextJustify justifyH, public SingleStringFrame(final String name, final UIFrame parent, final Color color, final TextJustify justifyH,
final TextJustify justifyV, final BitmapFont frameFont) { final TextJustify justifyV, final BitmapFont frameFont) {
super(name, parent); super(name, parent);
if (color == null) {
throw new IllegalArgumentException();
}
this.color = color; this.color = color;
this.justifyH = justifyH; this.justifyH = justifyH;
this.justifyV = justifyV; this.justifyV = justifyV;
@ -37,6 +40,9 @@ public class SingleStringFrame extends AbstractRenderableFrame {
} }
public void setColor(final Color color) { public void setColor(final Color color) {
if (color == null) {
throw new IllegalArgumentException();
}
this.color = color; this.color = color;
} }

View File

@ -82,6 +82,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CUnitType;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CWidget; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CWidget;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.GetAbilityByRawcodeVisitor; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.GetAbilityByRawcodeVisitor;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.AbstractGenericAliasedAbility;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.CLevelingAbility; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.CLevelingAbility;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.inventory.CAbilityInventory; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.inventory.CAbilityInventory;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.mine.CAbilityBlightedGoldMine; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.mine.CAbilityBlightedGoldMine;
@ -649,6 +650,53 @@ public class Jass2 {
return new StringJassValue(""); return new StringJassValue("");
} }
}); });
jassProgramVisitor.getJassNativeManager().createNative("BlzGetUnitAbilityByIndex", new JassFunction() {
@Override
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
final TriggerExecutionScope triggerScope) {
final CUnit whichUnit = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
final int whichAbilityIndex = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
final List<CAbility> abilities = whichUnit.getAbilities();
if (whichAbilityIndex < abilities.size()) {
return new HandleJassValue(abilityType, abilities.get(whichAbilityIndex));
}
else {
return new HandleJassValue(abilityType, null);
}
}
});
jassProgramVisitor.getJassNativeManager().createNative("WarsmashGetAbilityTypeId", new JassFunction() {
@Override
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
final TriggerExecutionScope triggerScope) {
final CAbility ability = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
if (ability instanceof AbstractGenericAliasedAbility) {
final AbstractGenericAliasedAbility aliasedAbility = (AbstractGenericAliasedAbility) ability;
return new IntegerJassValue(aliasedAbility.getAlias().getValue());
}
return IntegerJassValue.ZERO;
}
});
jassProgramVisitor.getJassNativeManager().createNative("WarsmashGetAbilityClassName", new JassFunction() {
@Override
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
final TriggerExecutionScope triggerScope) {
final CAbility ability = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
return new StringJassValue(ability.getClass().getSimpleName());
}
});
jassProgramVisitor.getJassNativeManager().createNative("WarsmashGetRawcode2String", new JassFunction() {
@Override
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
final TriggerExecutionScope triggerScope) {
final int rawcode = arguments.get(0).visit(IntegerJassValueVisitor.getInstance());
return new StringJassValue(new War3ID(rawcode).toString());
}
});
jassProgramVisitor.getJassNativeManager().createNative("GetObjectName", new JassFunction() { jassProgramVisitor.getJassNativeManager().createNative("GetObjectName", new JassFunction() {
@Override @Override
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope, public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
@ -1325,6 +1373,9 @@ public class Jass2 {
.visit(ObjectJassValueVisitor.<List<CPlayerJass>>getInstance()); .visit(ObjectJassValueVisitor.<List<CPlayerJass>>getInstance());
final CPlayerJass player = arguments.get(1) final CPlayerJass player = arguments.get(1)
.visit(ObjectJassValueVisitor.<CPlayerJass>getInstance()); .visit(ObjectJassValueVisitor.<CPlayerJass>getInstance());
if (force == null) {
throw new JassException(globalScope, "force is null", new NullPointerException());
}
force.add(player); force.add(player);
return null; return null;
} }

View File

@ -27,7 +27,7 @@ public class WarsmashConstants {
// find it yet so I used this // find it yet so I used this
public static final String DEFAULT_STRING = "Default string"; public static final String DEFAULT_STRING = "Default string";
public static final boolean CATCH_CURSOR = false; public static final boolean CATCH_CURSOR = true;
public static final boolean VERBOSE_LOGGING = false; public static final boolean VERBOSE_LOGGING = false;
public static final boolean ENABLE_DEBUG = false; public static final boolean ENABLE_DEBUG = false;
public static final char SPECIAL_ESCAPE_KEYCODE = 0x7E; public static final char SPECIAL_ESCAPE_KEYCODE = 0x7E;
@ -38,7 +38,7 @@ public class WarsmashConstants {
// workaround to fix it if you need the local files // workaround to fix it if you need the local files
// to take priority over built-ins for tilesets. // to take priority over built-ins for tilesets.
public static final boolean FIX_FLAT_FILES_TILESET_LOADING = false; public static final boolean FIX_FLAT_FILES_TILESET_LOADING = false;
public static final boolean ENABLE_MUSIC = false; public static final boolean ENABLE_MUSIC = true;
public static final boolean LOAD_UNITS_FROM_WORLDEDIT_DATA = false; public static final boolean LOAD_UNITS_FROM_WORLDEDIT_DATA = false;
public static final boolean CRASH_ON_INCOMPATIBLE_132_FEATURES = false; public static final boolean CRASH_ON_INCOMPATIBLE_132_FEATURES = false;
public static final boolean FIRE_DEATH_EVENTS_ON_REMOVEUNIT = false; public static final boolean FIRE_DEATH_EVENTS_ON_REMOVEUNIT = false;

View File

@ -119,7 +119,8 @@ public abstract class SkeletalNode extends GenericNode {
computedRotation.mul(scene.camera.inverseRotation); computedRotation.mul(scene.camera.inverseRotation);
} }
this.convertBasis(computedRotation); convertBasis(computedRotation);
computedRotation.mul(this.localRotation);
} }
else { else {
computedRotation = rotationHeap.set(this.localRotation); computedRotation = rotationHeap.set(this.localRotation);

View File

@ -182,27 +182,27 @@ public class PlayerSlotPane {
public void setTextFromRacePreference(final GameUI rootFrame, final CPlayerJass player) { public void setTextFromRacePreference(final GameUI rootFrame, final CPlayerJass player) {
final MenuFrame menuFrame = (MenuFrame) this.raceMenu.getPopupMenuFrame(); final MenuFrame menuFrame = (MenuFrame) this.raceMenu.getPopupMenuFrame();
if (player.isRacePrefSet(CRacePreference.RANDOM)) { if (player.isRacePrefSet(CRacePreference.RANDOM) && (menuFrame.getMenuItemCount() > 0)) {
rootFrame.setText( rootFrame.setText(
((StringFrame) ((GlueTextButtonFrame) this.raceMenu.getPopupTitleFrame()).getButtonText()), ((StringFrame) ((GlueTextButtonFrame) this.raceMenu.getPopupTitleFrame()).getButtonText()),
menuFrame.getMenuItem(0).getText()); menuFrame.getMenuItem(0).getText());
} }
else if (player.isRacePrefSet(CRacePreference.HUMAN)) { else if (player.isRacePrefSet(CRacePreference.HUMAN) && (menuFrame.getMenuItemCount() > 1)) {
rootFrame.setText( rootFrame.setText(
((StringFrame) ((GlueTextButtonFrame) this.raceMenu.getPopupTitleFrame()).getButtonText()), ((StringFrame) ((GlueTextButtonFrame) this.raceMenu.getPopupTitleFrame()).getButtonText()),
menuFrame.getMenuItem(1).getText()); menuFrame.getMenuItem(1).getText());
} }
else if (player.isRacePrefSet(CRacePreference.ORC)) { else if (player.isRacePrefSet(CRacePreference.ORC) && (menuFrame.getMenuItemCount() > 2)) {
rootFrame.setText( rootFrame.setText(
((StringFrame) ((GlueTextButtonFrame) this.raceMenu.getPopupTitleFrame()).getButtonText()), ((StringFrame) ((GlueTextButtonFrame) this.raceMenu.getPopupTitleFrame()).getButtonText()),
menuFrame.getMenuItem(2).getText()); menuFrame.getMenuItem(2).getText());
} }
else if (player.isRacePrefSet(CRacePreference.UNDEAD)) { else if (player.isRacePrefSet(CRacePreference.UNDEAD) && (menuFrame.getMenuItemCount() > 3)) {
rootFrame.setText( rootFrame.setText(
((StringFrame) ((GlueTextButtonFrame) this.raceMenu.getPopupTitleFrame()).getButtonText()), ((StringFrame) ((GlueTextButtonFrame) this.raceMenu.getPopupTitleFrame()).getButtonText()),
menuFrame.getMenuItem(3).getText()); menuFrame.getMenuItem(3).getText());
} }
else if (player.isRacePrefSet(CRacePreference.NIGHTELF)) { else if (player.isRacePrefSet(CRacePreference.NIGHTELF) && (menuFrame.getMenuItemCount() > 4)) {
rootFrame.setText( rootFrame.setText(
((StringFrame) ((GlueTextButtonFrame) this.raceMenu.getPopupTitleFrame()).getButtonText()), ((StringFrame) ((GlueTextButtonFrame) this.raceMenu.getPopupTitleFrame()).getButtonText()),
menuFrame.getMenuItem(4).getText()); menuFrame.getMenuItem(4).getText());

View File

@ -3,6 +3,7 @@ package com.etheller.warsmash.viewer5.handlers.w3x.ui.mapsetup;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.viewport.Viewport; import com.badlogic.gdx.utils.viewport.Viewport;
import com.etheller.warsmash.datasources.DataSource; import com.etheller.warsmash.datasources.DataSource;
import com.etheller.warsmash.parsers.fdf.GameUI; import com.etheller.warsmash.parsers.fdf.GameUI;
@ -40,8 +41,8 @@ public class TeamSetupPane {
int forceIndex = 0; int forceIndex = 0;
for (final Force force : mapInfo.getForces()) { for (final Force force : mapInfo.getForces()) {
final StringFrame forceLabelString = rootFrame.createStringFrame( final StringFrame forceLabelString = rootFrame.createStringFrame(
"SmashForce" + forceIndex + "NameLabel", rootFrame, null, TextJustify.LEFT, TextJustify.MIDDLE, "SmashForce" + forceIndex + "NameLabel", rootFrame, Color.WHITE, TextJustify.LEFT,
0.01f); TextJustify.MIDDLE, 0.01f);
rootFrame.setText(forceLabelString, rootFrame.getTrigStr(force.getName())); rootFrame.setText(forceLabelString, rootFrame.getTrigStr(force.getName()));
for (int i = 0; (i < WarsmashConstants.MAX_PLAYERS) && (usedSlots < playerCount); i++) { for (int i = 0; (i < WarsmashConstants.MAX_PLAYERS) && (usedSlots < playerCount); i++) {
final CBasePlayer player = config.getPlayer(i); final CBasePlayer player = config.getPlayer(i);

View File

@ -21,6 +21,15 @@ application {
applicationDefaultJvmArgs = [] applicationDefaultJvmArgs = []
} }
task runGame(dependsOn: classes, type: JavaExec) {
main = project.mainClassName
classpath = sourceSets.main.runtimeClasspath
standardInput = System.in
workingDir = project.assetsDir
ignoreExitValue = true
args cmdargs.split()
}
task debug(dependsOn: classes, type: JavaExec) { task debug(dependsOn: classes, type: JavaExec) {
main = project.mainClassName main = project.mainClassName
classpath = sourceSets.main.runtimeClasspath classpath = sourceSets.main.runtimeClasspath

View File

@ -43,6 +43,7 @@ import com.etheller.warsmash.viewer5.gl.WireframeExtension;
public class DesktopLauncher { public class DesktopLauncher {
public static void main(final String[] arg) { public static void main(final String[] arg) {
System.out.println("You ran it.");
final LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); final LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.useGL30 = true; config.useGL30 = true;
config.gles30ContextMajorVersion = 3; config.gles30ContextMajorVersion = 3;
@ -184,8 +185,8 @@ public class DesktopLauncher {
} }
}; };
Extensions.audio = new AudioExtension() { Extensions.audio = new AudioExtension() {
final FloatBuffer orientation = (FloatBuffer)BufferUtils.createFloatBuffer(6).clear(); final FloatBuffer orientation = BufferUtils.createFloatBuffer(6).clear();
final FloatBuffer position = (FloatBuffer)BufferUtils.createFloatBuffer(3).clear(); final FloatBuffer position = BufferUtils.createFloatBuffer(3).clear();
@Override @Override
public float getDuration(final Sound sound) { public float getDuration(final Sound sound) {

View File

@ -267,12 +267,12 @@ EXITWHEN : 'exitwhen';
DEBUG : 'debug'; DEBUG : 'debug';
fragment ESCAPED_QUOTE : '\\"'; fragment ESCAPED_QUOTE : '\\"';
STRING_LITERAL : '"' ( ESCAPED_QUOTE | ~('\n'|'\r') )*? '"'; STRING_LITERAL : '"' ( ESCAPED_QUOTE | . )*? '"';
INTEGER : [0]|([1-9][0-9]*) ; INTEGER : [0]|([1-9][0-9]*) ;
HEX_CONSTANT : '0x'(([0-9]|[a-f])*) ; HEX_CONSTANT : '0x'(([0-9]|[a-f]|[A-F])*) ;
DOLLAR_HEX_CONSTANT : '$'(([0-9]|[A-F])*) ; DOLLAR_HEX_CONSTANT : '$'(([0-9]|[A-F])*) ;
RAWCODE : ('\''.*?'\''); RAWCODE : ('\''.*?'\'');