WarpPI/core/src/main/java/it/cavallium/warppi/extra/mario/MarioScreen.java

287 lines
10 KiB
Java
Raw Normal View History

2018-10-05 16:00:15 +02:00
package it.cavallium.warppi.extra.mario;
2016-09-02 20:32:37 +02:00
import java.io.IOException;
2019-02-27 23:29:03 +01:00
import it.cavallium.warppi.WarpPI;
import it.cavallium.warppi.StaticVars;
2018-10-05 16:00:15 +02:00
import it.cavallium.warppi.Platform.ConsoleUtils;
import it.cavallium.warppi.device.display.DisplayOutputDevice;
2019-02-27 23:29:03 +01:00
import it.cavallium.warppi.device.input.Keyboard;
2018-10-05 16:00:15 +02:00
import it.cavallium.warppi.event.KeyPressedEvent;
2018-10-06 16:37:44 +02:00
import it.cavallium.warppi.event.KeyReleasedEvent;
2018-10-05 16:00:15 +02:00
import it.cavallium.warppi.gui.HistoryBehavior;
2019-11-01 18:04:01 +01:00
import it.cavallium.warppi.gui.RenderContext;
import it.cavallium.warppi.gui.ScreenContext;
import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.Skin;
2018-10-05 16:00:15 +02:00
import it.cavallium.warppi.gui.screens.Screen;
2016-09-02 20:32:37 +02:00
public class MarioScreen extends Screen {
2018-04-01 01:01:57 +02:00
private MarioGame g;
2018-05-12 21:18:29 +02:00
private static Skin skin;
private static Skin groundskin;
2018-04-01 17:09:42 +02:00
private static BinaryFont gpuTest2;
private static BinaryFont gpuTest1;
2018-04-01 17:11:56 +02:00
private static boolean gpuTest12;
2018-04-01 17:09:42 +02:00
private static Skin gpuTest3;
private int gpuTestNum = 0;
private float gpuTestElapsed = 0;
2018-05-12 21:18:29 +02:00
private final int gpuTestMax = 21;
private final String[] gpuCharTest1 = new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "ò" };
2018-04-01 17:09:42 +02:00
private int gpuCharTest1Num = 0;
private float gpuCharTestt1Elapsed = 0;
2016-09-02 20:32:37 +02:00
private boolean errored;
2018-04-01 01:01:57 +02:00
// public float[] marioPos = new float[] { 30, 0 };
// public float[] marioForces = new float[] { 0, 0 };
// public float jumptime = 0;
// public boolean walking = false;
// public boolean running = false;
// public boolean jumping = false;
// public boolean flipped = false;
// public boolean onGround = true;
2016-09-02 20:32:37 +02:00
public MarioScreen() {
super();
2018-10-05 16:00:15 +02:00
historyBehavior = HistoryBehavior.ALWAYS_KEEP_IN_HISTORY;
2016-09-02 20:32:37 +02:00
}
@Override
2019-11-01 18:04:01 +01:00
public void graphicInitialized(ScreenContext ctx) {
try {
if (MarioScreen.skin == null) {
MarioScreen.skin = d.display.getGraphicEngine().loadSkin("/marioskin.png");
}
if (MarioScreen.groundskin == null) {
MarioScreen.groundskin = d.display.getGraphicEngine().loadSkin("/marioground.png");
}
if (MarioScreen.gpuTest2 == null) {
try {
2019-11-01 18:04:01 +01:00
MarioScreen.gpuTest2 = d.display.getGraphicEngine().loadFont("N:\\gputest", "gputest2");
} catch (final Exception ex) {}
}
if (MarioScreen.gpuTest1 == null) {
try {
2019-11-01 18:04:01 +01:00
MarioScreen.gpuTest1 = d.display.getGraphicEngine().loadFont("N:\\gputest", "gputest12");
MarioScreen.gpuTest12 = true;
} catch (final Exception ex) {
MarioScreen.gpuTest12 = false;
try {
2019-11-01 18:04:01 +01:00
MarioScreen.gpuTest1 = d.display.getGraphicEngine().loadFont("N:\\gputest", "gputest1");
} catch (final Exception ex2) {}
}
}
if (MarioScreen.gpuTest3 == null) {
try {
MarioScreen.gpuTest3 = d.display.getGraphicEngine().loadSkin("N:\\gputest\\font_gputest3.png");
} catch (final Exception ex) {
ex.printStackTrace();
}
}
} catch (final IOException e) {
e.printStackTrace();
}
}
2016-09-02 20:32:37 +02:00
@Override
2018-03-17 00:09:40 +01:00
public void initialized() {
2016-09-02 20:32:37 +02:00
try {
2018-09-28 11:39:28 +02:00
if (MarioScreen.skin == null) {
MarioScreen.skin = d.display.getGraphicEngine().loadSkin("/marioskin.png");
2018-09-28 11:39:28 +02:00
}
if (MarioScreen.groundskin == null) {
MarioScreen.groundskin = d.display.getGraphicEngine().loadSkin("/marioground.png");
2018-09-28 11:39:28 +02:00
}
if (MarioScreen.gpuTest2 == null) {
try {
MarioScreen.gpuTest2 = d.display.getGraphicEngine().loadFont("N:\\gputest\\gputest2");
2018-05-12 21:18:29 +02:00
} catch (final Exception ex) {}
2018-09-28 11:39:28 +02:00
}
if (MarioScreen.gpuTest1 == null) {
2017-11-19 22:58:37 +01:00
try {
MarioScreen.gpuTest1 = d.display.getGraphicEngine().loadFont("N:\\gputest\\gputest12");
2018-09-22 11:17:30 +02:00
MarioScreen.gpuTest12 = true;
2018-05-12 21:18:29 +02:00
} catch (final Exception ex) {
2018-09-22 11:17:30 +02:00
MarioScreen.gpuTest12 = false;
2018-04-01 17:11:56 +02:00
try {
MarioScreen.gpuTest1 = d.display.getGraphicEngine().loadFont("N:\\gputest\\gputest1");
2018-05-12 21:18:29 +02:00
} catch (final Exception ex2) {}
2018-04-01 17:11:56 +02:00
}
2018-09-28 11:39:28 +02:00
}
if (MarioScreen.gpuTest3 == null) {
try {
MarioScreen.gpuTest3 = d.display.getGraphicEngine().loadSkin("N:\\gputest\\font_gputest3.png");
2018-08-29 00:07:45 +02:00
} catch (final Exception ex) {
ex.printStackTrace();
}
2018-09-28 11:39:28 +02:00
}
} catch (final IOException e) {
2016-09-02 20:32:37 +02:00
e.printStackTrace();
}
2016-09-02 20:32:37 +02:00
}
2016-09-02 20:32:37 +02:00
@Override
public void created() throws InterruptedException {
2018-09-28 11:39:28 +02:00
if (!errored) {
2018-04-01 01:01:57 +02:00
g = new MarioGame();
2018-09-28 11:39:28 +02:00
}
2016-09-02 20:32:37 +02:00
}
2018-10-06 16:37:44 +02:00
boolean rightPressed, leftPressed, jumpPressed;
@Override
public boolean onKeyPressed(KeyPressedEvent k) {
switch(k.getKey()) {
case OK:
case SIMPLIFY:
case STEP:
jumpPressed = true;
return true;
case LEFT:
leftPressed = true;
return true;
case RIGHT:
rightPressed = true;
return true;
default:
return false;
}
}
@Override
public boolean onKeyReleased(KeyReleasedEvent k) {
switch(k.getKey()) {
case OK:
case SIMPLIFY:
case STEP:
jumpPressed = false;
return true;
case LEFT:
leftPressed = false;
return true;
case RIGHT:
rightPressed = false;
return true;
default:
return false;
}
}
2016-09-02 20:32:37 +02:00
@Override
2019-11-01 18:04:01 +01:00
public void beforeRender(ScreenContext ctx, final float dt) {
2016-09-02 20:32:37 +02:00
if (!errored) {
2018-04-01 01:01:57 +02:00
final boolean upPressed = false, downPressed = false, runPressed = false;
g.gameTick(dt, upPressed, downPressed, leftPressed, rightPressed, jumpPressed, runPressed);
2018-04-01 17:09:42 +02:00
gpuTestElapsed += dt;
while (gpuTestElapsed >= 0.04) {
gpuTestNum = (gpuTestNum + 1) % gpuTestMax;
gpuTestElapsed -= 0.04;
2017-11-19 22:58:37 +01:00
}
2018-04-01 17:09:42 +02:00
gpuCharTestt1Elapsed += dt;
while (gpuCharTestt1Elapsed >= 1.5) {
gpuCharTest1Num = (gpuCharTest1Num + 1) % gpuCharTest1.length;
gpuCharTestt1Elapsed -= 1.5;
2017-11-19 22:58:37 +01:00
}
2018-05-12 21:18:29 +02:00
d.renderer.glClearColor(0xff000000);
2016-09-02 20:32:37 +02:00
}
}
@Override
2019-11-01 18:04:01 +01:00
public void render(RenderContext ctx) {
DisplayOutputDevice display = d.display;
2018-09-28 11:39:28 +02:00
if (errored) {
d.renderer.glDrawStringLeft(0, 20, "ERROR");
2018-09-28 11:39:28 +02:00
} else {
2018-09-22 11:17:30 +02:00
if (MarioScreen.groundskin != null) {
2018-05-12 21:18:29 +02:00
final double playerX = g.getPlayer().getX();
final double playerY = g.getPlayer().getY();
MarioScreen.groundskin.use(d.display);
2018-05-12 21:18:29 +02:00
final MarioWorld w = g.getCurrentWorld();
final int width = w.getWidth();
final int height = w.getHeight();
2019-11-01 18:04:01 +01:00
final float screenX = ctx.getWidth() / 2f - 8f;
final float screenY = ctx.getHeight() / 2f - 8f;
2018-05-12 21:18:29 +02:00
final float shiftX = -8 + 16 * (float) playerX;
final float shiftY = -8 + 16 * (height - (float) playerY);
2018-04-01 16:49:54 +02:00
int blue = -1;
2018-09-28 11:39:28 +02:00
for (int ix = 0; ix < width; ix++) {
2018-04-01 01:01:57 +02:00
for (int iy = 0; iy < height; iy++) {
2018-05-12 21:18:29 +02:00
final double distX = Math.abs(playerX - ix);
2019-11-02 23:13:19 +01:00
final double distY = Math.abs(playerY - iy - 1.2d);
if (distX * distX + distY * distY / 2d < 270d) {
2018-05-12 21:18:29 +02:00
final byte b = w.getBlockIdAt(ix, iy);
2018-04-01 16:49:54 +02:00
if (b == 0) {
if (blue != 1) {
blue = 1;
d.renderer.glColor(0xff9290ff);
2018-04-01 16:49:54 +02:00
}
d.renderer.glFillColor(screenX - shiftX + 16 * ix, screenY - shiftY + 16 * (height - iy), 16, 16);
2018-04-01 16:49:54 +02:00
} else {
if (blue != 0) {
blue = 0;
d.renderer.glColor(0xffffffff);
2018-04-01 16:49:54 +02:00
}
d.renderer.glFillRect(screenX - shiftX + 16 * ix, screenY - shiftY + 16 * (height - iy), 16, 16, 0, 0, 16, 16);
2018-04-01 16:49:54 +02:00
}
2018-04-01 01:01:57 +02:00
}
}
2018-09-28 11:39:28 +02:00
}
2018-04-01 16:49:54 +02:00
if (blue != 0) {
blue = 0;
d.renderer.glColor(0xffffffff);
2018-04-01 16:49:54 +02:00
}
2018-04-01 01:01:57 +02:00
//DRAW MARIO
MarioScreen.skin.use(d.display);
d.renderer.glFillRect(screenX - (g.getPlayer().flipped ? 3 : 0), screenY, 35, 27, 35 * (g.getPlayer().marioSkinPos[0] + (g.getPlayer().flipped ? 2 : 1)), 27 * g.getPlayer().marioSkinPos[1], 35 * (g.getPlayer().flipped ? -1 : 1), 27);
2018-04-01 01:01:57 +02:00
// PIDisplay.renderer.glDrawSkin(getPosX() - 18, 25 + getPosY(), 35 * (marioSkinPos[0] + (flipped ? 2 : 1)), 27 * marioSkinPos[1], 35 * (marioSkinPos[0] + (flipped ? 1 : 2)), 27 * (marioSkinPos[1] + 1), true);
}
2018-04-01 17:09:42 +02:00
// GPU PERFORMANCE TEST
2018-09-22 11:17:30 +02:00
if (MarioScreen.gpuTest1 != null) {
d.renderer.glColor3f(1, 1, 1);
2019-11-01 18:04:01 +01:00
d.renderer.glFillColor(ctx.getWidth() - (MarioScreen.gpuTest12 ? 512 : 256), ctx.getHeight() / 2 - (MarioScreen.gpuTest12 ? 256 : 128), MarioScreen.gpuTest12 ? 512 : 256, MarioScreen.gpuTest12 ? 512 : 256);
MarioScreen.gpuTest1.use(d.display);
d.renderer.glColor3f(0, 0, 0);
2019-11-01 18:04:01 +01:00
d.renderer.glDrawStringRight(ctx.getWidth(), ctx.getHeight() / 2 - (MarioScreen.gpuTest12 ? 256 : 128), gpuCharTest1[gpuCharTest1Num]);
2017-11-19 22:58:37 +01:00
}
2018-09-22 11:17:30 +02:00
if (MarioScreen.gpuTest3 != null) {
MarioScreen.gpuTest3.use(d.display);
d.renderer.glColor4f(1, 1, 1, 0.7f);
d.renderer.glFillRect(0, display.getDisplaySize()[1] - 128, 224, 128, gpuTestNum * 224, 0, 224, 128);
2017-11-19 22:58:37 +01:00
}
2018-09-22 11:17:30 +02:00
if (MarioScreen.gpuTest2 != null) {
MarioScreen.gpuTest2.use(d.display);
d.renderer.glColor(0xFF000000);
2019-11-01 18:04:01 +01:00
d.renderer.glDrawStringRight(display.getDisplaySize()[0], ctx.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "A");
d.renderer.glColor(0xFF800000);
2019-11-01 18:04:01 +01:00
d.renderer.glDrawStringRight(display.getDisplaySize()[0], ctx.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "B");
d.renderer.glColor(0xFFeea28e);
2019-11-01 18:04:01 +01:00
d.renderer.glDrawStringRight(display.getDisplaySize()[0], ctx.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "C");
d.renderer.glColor(0xFFee7255);
2019-11-01 18:04:01 +01:00
d.renderer.glDrawStringRight(display.getDisplaySize()[0], ctx.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "D");
d.renderer.glColor(0xFFeac0b0);
2019-11-01 18:04:01 +01:00
d.renderer.glDrawStringRight(display.getDisplaySize()[0], ctx.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "E");
d.renderer.glColor(0xFFf3d8ce);
2019-11-01 18:04:01 +01:00
d.renderer.glDrawStringRight(display.getDisplaySize()[0], ctx.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "F");
d.renderer.glColor(0xFFffede7);
2019-11-01 18:04:01 +01:00
d.renderer.glDrawStringRight(display.getDisplaySize()[0], ctx.getHeight() - MarioScreen.gpuTest2.getCharacterHeight(), "G");
}
2016-09-02 20:32:37 +02:00
}
}
@Override
public boolean mustBeRefreshed() {
return true;
}
2018-10-04 12:38:54 +02:00
@Override
public String getSessionTitle() {
return "Absolutely not Super Mario";
}
2016-09-02 20:32:37 +02:00
}