mirror of
https://github.com/Retera/WarsmashModEngine.git
synced 2022-07-31 17:38:59 +02:00
Update ramps and cliffs
This commit is contained in:
parent
4f7368eb57
commit
ec1510adcd
@ -594,25 +594,24 @@ public class Terrain {
|
|||||||
}
|
}
|
||||||
if (!(facingDown && (j == 0)) && !(!facingDown && (j >= (this.rows - 2)))
|
if (!(facingDown && (j == 0)) && !(!facingDown && (j >= (this.rows - 2)))
|
||||||
&& !(facingLeft && (i == 0)) && !(!facingLeft && (i >= (this.columns - 2)))) {
|
&& !(facingLeft && (i == 0)) && !(!facingLeft && (i >= (this.columns - 2)))) {
|
||||||
final boolean br = ((bottomLeft.getRamp() != 0) != (bottomRight.getRamp() != 0))
|
final boolean verticalRamp = ((bottomLeft.isRamp()) != (bottomRight.isRamp()))
|
||||||
&& ((topLeft.getRamp() != 0) != (topRight.getRamp() != 0))
|
&& ((topLeft.isRamp()) != (topRight.isRamp()))
|
||||||
&& !this.corners[i + (bottomRight.getRamp() != 0 ? 1 : 0)][j
|
&& !this.corners[i][j + (facingDown ? -1 : 1)].cliff;
|
||||||
+ (facingDown ? -1 : 1)].cliff;
|
|
||||||
|
|
||||||
final boolean bo = ((bottomLeft.getRamp() != 0) != (topLeft.getRamp() != 0))
|
final boolean horizontalRamp = ((bottomLeft.isRamp()) != (topLeft.isRamp()))
|
||||||
&& ((bottomRight.getRamp() != 0) != (topRight.getRamp() != 0))
|
&& ((bottomRight.isRamp()) != (topRight.isRamp()))
|
||||||
&& !this.corners[i + (facingLeft ? -1 : 1)][j + (topLeft.getRamp() != 0 ? 1 : 0)].cliff;
|
&& !this.corners[i + (facingLeft ? -1 : 1)][j].cliff;
|
||||||
|
|
||||||
if (br || bo) {
|
if (verticalRamp || horizontalRamp) {
|
||||||
String fileName = "" + (char) ((bottomLeft.getRamp() != 0 ? 'L' : 'A')
|
String fileName = ""
|
||||||
+ ((bottomLeft.getLayerHeight() - base) * (bottomLeft.getRamp() != 0 ? -4 : 1)))
|
+ (char) ((topLeft.isRamp() ? 'L' : 'A')
|
||||||
+ (char) ((topLeft.getRamp() != 0 ? 'L' : 'A')
|
+ ((topLeft.getLayerHeight() - base) * (topLeft.isRamp() ? -4 : 1)))
|
||||||
+ ((topLeft.getLayerHeight() - base) * (topLeft.getRamp() != 0 ? -4 : 1)))
|
+ (char) ((topRight.isRamp() ? 'L' : 'A')
|
||||||
+ (char) ((topRight.getRamp() != 0 ? 'L' : 'A')
|
+ ((topRight.getLayerHeight() - base) * (topRight.isRamp() ? -4 : 1)))
|
||||||
+ ((topRight.getLayerHeight() - base) * (topRight.getRamp() != 0 ? -4 : 1)))
|
+ (char) ((bottomRight.isRamp() ? 'L' : 'A')
|
||||||
+ (char) ((bottomRight.getRamp() != 0 ? 'L' : 'A')
|
+ ((bottomRight.getLayerHeight() - base) * (bottomRight.isRamp() ? -4 : 1)))
|
||||||
+ ((bottomRight.getLayerHeight() - base)
|
+ (char) ((bottomLeft.isRamp() ? 'L' : 'A')
|
||||||
* (bottomRight.getRamp() != 0 ? -4 : 1)));
|
+ ((bottomLeft.getLayerHeight() - base) * (bottomLeft.isRamp() ? -4 : 1)));
|
||||||
|
|
||||||
final String rampModelDir = this.cliffTextures.get(bottomLeftCliffTex).rampModelDir;
|
final String rampModelDir = this.cliffTextures.get(bottomLeftCliffTex).rampModelDir;
|
||||||
fileName = "Doodads\\Terrain\\" + rampModelDir + "\\" + rampModelDir + fileName + "0.mdx";
|
fileName = "Doodads\\Terrain\\" + rampModelDir + "\\" + rampModelDir + fileName + "0.mdx";
|
||||||
@ -625,19 +624,20 @@ public class Terrain {
|
|||||||
|
|
||||||
for (int ji = this.cliffs.size(); ji-- > 0;) {
|
for (int ji = this.cliffs.size(); ji-- > 0;) {
|
||||||
final IVec3 pos = this.cliffs.get(ji);
|
final IVec3 pos = this.cliffs.get(ji);
|
||||||
if ((pos.x == (i + ((bo ? 1 : 0) * (facingLeft ? 0 : 1))))
|
if ((pos.x == (i + ((horizontalRamp ? 1 : 0) * (facingLeft ? -1 : 0))))
|
||||||
&& (pos.y == (j - ((br ? 1 : 0) * (facingDown ? 1 : 0))))) {
|
&& (pos.y == (j - ((verticalRamp ? 1 : 0) * (facingDown ? 1 : 0))))) {
|
||||||
this.cliffs.remove(ji);
|
this.cliffs.remove(ji);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.cliffs.add(new IVec3((i + ((bo ? 1 : 0) * (facingLeft ? 0 : 1))),
|
this.cliffs.add(new IVec3((i + ((horizontalRamp ? 1 : 0) * (facingLeft ? -1 : 0))),
|
||||||
(j - ((br ? 1 : 0) * (facingDown ? 1 : 0))), this.pathToCliff.get(fileName)));
|
(j - ((verticalRamp ? 1 : 0) * (facingDown ? 1 : 0))),
|
||||||
|
this.pathToCliff.get(fileName)));
|
||||||
bottomLeft.romp = true;
|
bottomLeft.romp = true;
|
||||||
|
|
||||||
this.corners[i + ((facingLeft ? -1 : 1) * (bo ? 1 : 0))][j
|
this.corners[i + ((facingLeft ? -1 : 1) * (horizontalRamp ? 1 : 0))][j
|
||||||
+ ((facingDown ? -1 : 1) * (br ? 1 : 0))].romp = true;
|
+ ((facingDown ? -1 : 1) * (verticalRamp ? 1 : 0))].romp = true;
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -788,8 +788,8 @@ public class Terrain {
|
|||||||
final RenderCorner topLeft = this.corners[x + i][y + j + 1];
|
final RenderCorner topLeft = this.corners[x + i][y + j + 1];
|
||||||
final RenderCorner topRight = this.corners[x + i + 1][y + j + 1];
|
final RenderCorner topRight = this.corners[x + i + 1][y + j + 1];
|
||||||
|
|
||||||
if ((bottomLeft.getRamp() != 0) && (topLeft.getRamp() != 0) && (bottomRight.getRamp() != 0)
|
if ((bottomLeft.isRamp()) && (topLeft.isRamp()) && (bottomRight.isRamp())
|
||||||
&& (topRight.getRamp() != 0) && (!bottomLeft.romp) && (!bottomRight.romp)
|
&& (topRight.isRamp()) && (!bottomLeft.romp) && (!bottomRight.romp)
|
||||||
&& (!topLeft.romp) && (!topRight.romp)) {
|
&& (!topLeft.romp) && (!topRight.romp)) {
|
||||||
break ILoop;
|
break ILoop;
|
||||||
}
|
}
|
||||||
@ -825,8 +825,8 @@ public class Terrain {
|
|||||||
final RenderCorner topLeft = this.corners[x][y + 1];
|
final RenderCorner topLeft = this.corners[x][y + 1];
|
||||||
final RenderCorner topRight = this.corners[x + 1][y + 1];
|
final RenderCorner topRight = this.corners[x + 1][y + 1];
|
||||||
|
|
||||||
return (bottomLeft.getRamp() != 0) && (topLeft.getRamp() != 0) && (bottomRight.getRamp() != 0)
|
return (bottomLeft.isRamp()) && (topLeft.isRamp()) && (bottomRight.isRamp()) && (topRight.isRamp())
|
||||||
&& (topRight.getRamp() != 0) && !((bottomLeft.getLayerHeight() == topRight.getLayerHeight())
|
&& !((bottomLeft.getLayerHeight() == topRight.getLayerHeight())
|
||||||
&& (topLeft.getLayerHeight() == bottomRight.getLayerHeight()));
|
&& (topLeft.getLayerHeight() == bottomRight.getLayerHeight()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.etheller.warsmash.desktop.util;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JScrollPane;
|
||||||
|
import javax.swing.WindowConstants;
|
||||||
|
|
||||||
|
import com.etheller.warsmash.WarsmashGdxMapGame;
|
||||||
|
import com.etheller.warsmash.datasources.DataSource;
|
||||||
|
import com.etheller.warsmash.desktop.DesktopLauncher;
|
||||||
|
import com.etheller.warsmash.parsers.w3x.War3Map;
|
||||||
|
import com.etheller.warsmash.parsers.w3x.w3e.War3MapW3e;
|
||||||
|
import com.etheller.warsmash.units.DataTable;
|
||||||
|
|
||||||
|
public class TerrainView {
|
||||||
|
public static void main(final String[] args) {
|
||||||
|
final DataTable warsmashIni = DesktopLauncher.loadWarsmashIni();
|
||||||
|
final DataSource dataSources = WarsmashGdxMapGame.parseDataSources(warsmashIni);
|
||||||
|
final War3Map war3Map = new War3Map(dataSources, warsmashIni.get("Map").getField("FilePath"));
|
||||||
|
try {
|
||||||
|
final War3MapW3e environmentFile = war3Map.readEnvironment();
|
||||||
|
final TerrainViewPanel terrainViewPanel = new TerrainViewPanel(environmentFile);
|
||||||
|
|
||||||
|
final JFrame frame = new JFrame("TerrainView");
|
||||||
|
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
||||||
|
frame.setContentPane(new JScrollPane(terrainViewPanel));
|
||||||
|
frame.setBounds(0, 0, 800, 600);
|
||||||
|
frame.setLocationRelativeTo(null);
|
||||||
|
frame.setVisible(true);
|
||||||
|
}
|
||||||
|
catch (final IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,93 @@
|
|||||||
|
package com.etheller.warsmash.desktop.util;
|
||||||
|
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseListener;
|
||||||
|
|
||||||
|
import javax.swing.Box;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
import com.etheller.warsmash.parsers.w3x.w3e.Corner;
|
||||||
|
import com.etheller.warsmash.parsers.w3x.w3e.War3MapW3e;
|
||||||
|
|
||||||
|
public class TerrainViewPanel extends JPanel {
|
||||||
|
private final War3MapW3e environmentFile;
|
||||||
|
private final Font baseFont;
|
||||||
|
private final Font biggerFont;
|
||||||
|
private int cliffMode = 0;
|
||||||
|
|
||||||
|
public TerrainViewPanel(final War3MapW3e environmentFile) {
|
||||||
|
this.environmentFile = environmentFile;
|
||||||
|
add(Box.createRigidArea(new Dimension(this.environmentFile.getCorners()[0].length * 32,
|
||||||
|
this.environmentFile.getCorners().length * 32)));
|
||||||
|
this.baseFont = getFont();
|
||||||
|
this.biggerFont = this.baseFont.deriveFont(24f);
|
||||||
|
addMouseListener(new MouseListener() {
|
||||||
|
@Override
|
||||||
|
public void mouseReleased(final MouseEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
TerrainViewPanel.this.cliffMode = (TerrainViewPanel.this.cliffMode + 1) % 4;
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseExited(final MouseEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseEntered(final MouseEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(final MouseEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void paintComponent(final Graphics g) {
|
||||||
|
super.paintComponent(g);
|
||||||
|
final Corner[][] corners = this.environmentFile.getCorners();
|
||||||
|
for (int i = 0; i < corners.length; i++) {
|
||||||
|
final int length = corners[i].length;
|
||||||
|
for (int j = 0; j < length; j++) {
|
||||||
|
int base = 0;
|
||||||
|
final int value;
|
||||||
|
switch (this.cliffMode) {
|
||||||
|
case 0:
|
||||||
|
value = corners[i][j].getRamp();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
value = corners[i][j].getLayerHeight();
|
||||||
|
base = 2;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
value = corners[i][j].getGroundTexture();
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
value = corners[i][j].getCliffTexture();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
value = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (value != base) {
|
||||||
|
g.setFont(this.biggerFont);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
g.setFont(this.baseFont);
|
||||||
|
}
|
||||||
|
g.drawString(value + "", j * 32, (length - i - 1) * 32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user