2017-01-22 13:46:38 +01:00
|
|
|
package org.warp.picalculator.gui.screens;
|
2016-09-02 20:32:37 +02:00
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
2016-09-19 18:48:27 +02:00
|
|
|
import org.warp.picalculator.device.Keyboard;
|
|
|
|
import org.warp.picalculator.device.Keyboard.Key;
|
2017-01-31 22:29:49 +01:00
|
|
|
import org.warp.picalculator.gui.DisplayManager;
|
2017-02-02 10:30:45 +01:00
|
|
|
import org.warp.picalculator.gui.graphicengine.Skin;
|
2016-09-02 20:32:37 +02:00
|
|
|
|
|
|
|
public class MarioScreen extends Screen {
|
|
|
|
|
2017-02-02 10:30:45 +01:00
|
|
|
private Skin skin;
|
|
|
|
private Skin groundskin;
|
2016-09-02 20:32:37 +02:00
|
|
|
private boolean errored;
|
2017-01-31 22:29:49 +01:00
|
|
|
public float[] marioPos = new float[] { 30, 0 };
|
|
|
|
public float[] marioForces = new float[] { 0, 0 };
|
2016-09-12 16:30:51 +02:00
|
|
|
public float walkAnimation = 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;
|
2017-01-31 22:29:49 +01:00
|
|
|
public int[] marioSkinPos = new int[] { 0, 0 };
|
|
|
|
|
2016-09-02 20:32:37 +02:00
|
|
|
public MarioScreen() {
|
|
|
|
super();
|
2016-11-25 22:40:43 +01:00
|
|
|
canBeInHistory = false;
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void init() {
|
|
|
|
try {
|
2017-02-02 10:30:45 +01:00
|
|
|
skin = DisplayManager.engine.loadSkin("marioskin.png");
|
|
|
|
groundskin = DisplayManager.engine.loadSkin("marioground.png");
|
2017-04-10 22:50:43 +02:00
|
|
|
} catch (final IOException e) {
|
2016-09-02 20:32:37 +02:00
|
|
|
e.printStackTrace();
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-09-02 20:32:37 +02:00
|
|
|
@Override
|
|
|
|
public void created() throws InterruptedException {
|
|
|
|
if (!errored) {
|
2017-04-10 22:50:43 +02:00
|
|
|
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void beforeRender(float dt) {
|
|
|
|
if (!errored) {
|
2016-09-12 16:30:51 +02:00
|
|
|
walkAnimation += dt;
|
2017-01-31 22:29:49 +01:00
|
|
|
final boolean rightPressed = Keyboard.isKeyDown(2, 5);
|
|
|
|
final boolean leftPressed = Keyboard.isKeyDown(2, 3);
|
|
|
|
final boolean jumpPressed = Keyboard.isKeyDown(2, 1);
|
2016-11-25 22:40:43 +01:00
|
|
|
if ((leftPressed || rightPressed) == (leftPressed & rightPressed)) {
|
2016-09-12 16:30:51 +02:00
|
|
|
walking = false;
|
|
|
|
walkAnimation = 0;
|
|
|
|
} else {
|
|
|
|
if (rightPressed) { //RIGHT
|
|
|
|
if (marioForces[0] < 500f) {
|
2017-01-31 22:29:49 +01:00
|
|
|
marioForces[0] += dt * 500f;
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
|
|
|
walking = true;
|
|
|
|
flipped = false;
|
|
|
|
}
|
|
|
|
if (leftPressed) { //LEFT
|
|
|
|
if (marioForces[0] > -500f) {
|
2017-01-31 22:29:49 +01:00
|
|
|
marioForces[0] -= dt * 500f;
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
|
|
|
walking = true;
|
|
|
|
flipped = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (jumpPressed) { //JUMP
|
2017-01-31 22:29:49 +01:00
|
|
|
jumptime += dt;
|
2016-09-12 16:30:51 +02:00
|
|
|
if (!jumping && onGround) {
|
2017-01-31 22:29:49 +01:00
|
|
|
marioForces[1] = dt * (4 * 1569.6f);
|
2016-09-12 16:30:51 +02:00
|
|
|
jumping = true;
|
|
|
|
onGround = false;
|
|
|
|
} else if (jumptime <= 0.5f) {
|
2017-01-31 22:29:49 +01:00
|
|
|
marioForces[1] = dt * (4 * 1569.6f);
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
jumping = false;
|
|
|
|
jumptime = 0;
|
|
|
|
}
|
|
|
|
if (!walking & !running & !jumping) {
|
|
|
|
marioSkinPos[0] = 0;
|
|
|
|
marioSkinPos[1] = 0;
|
|
|
|
} else if (onGround & walking & !running & !jumping && walkAnimation >= 0.08) {
|
2017-01-31 22:29:49 +01:00
|
|
|
while (walkAnimation > 0.08) {
|
2016-09-12 16:30:51 +02:00
|
|
|
walkAnimation -= 0.08;
|
|
|
|
if (marioSkinPos[0] == 1 & marioSkinPos[1] == 0) {
|
|
|
|
marioSkinPos[0] += 2;
|
|
|
|
} else if (marioSkinPos[0] == 3 & marioSkinPos[1] == 0) {
|
|
|
|
marioSkinPos[0] -= 1;
|
|
|
|
} else if (marioSkinPos[0] == 2 & marioSkinPos[1] == 0) {
|
|
|
|
marioSkinPos[0] -= 1;
|
|
|
|
} else {
|
|
|
|
marioSkinPos[0] = 1;
|
|
|
|
marioSkinPos[1] = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (jumping) {
|
|
|
|
marioSkinPos[0] = 5;
|
|
|
|
marioSkinPos[1] = 1;
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
marioForces[1] -= dt * 1569.6;
|
|
|
|
marioPos[0] += dt * marioForces[0];
|
2016-09-12 16:30:51 +02:00
|
|
|
if (!onGround) {
|
2017-01-31 22:29:49 +01:00
|
|
|
marioPos[1] -= dt * marioForces[1];
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
|
|
|
marioForces[0] *= 0.75;
|
2016-11-25 22:40:43 +01:00
|
|
|
|
2017-01-31 22:29:49 +01:00
|
|
|
DisplayManager.renderer.glClearColor(0xff9290ff);
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void render() {
|
|
|
|
if (errored) {
|
2017-01-31 22:29:49 +01:00
|
|
|
DisplayManager.renderer.glDrawStringLeft(0, 20, "ERROR");
|
2016-09-02 20:32:37 +02:00
|
|
|
} else {
|
2017-02-02 10:30:45 +01:00
|
|
|
DisplayManager.fonts[0].use(DisplayManager.engine);
|
|
|
|
groundskin.use(DisplayManager.engine);
|
2017-01-31 22:29:49 +01:00
|
|
|
DisplayManager.renderer.glFillRect(16 * 0, 25 + 25, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 1, 25 + 25, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 2, 25 + 25, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 3, 25 + 25, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 4, 25 + 25, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 5, 25 + 25, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 6, 25 + 25, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 7, 25 + 25, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 8, 25 + 25, 16, 16, 0, 0, 16, 16);
|
|
|
|
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 0, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 1, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 2, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 3, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 4, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 5, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 6, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 7, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16);
|
|
|
|
DisplayManager.renderer.glFillRect(16 * 8, 25 + 25 + 16 * 1, 16, 16, 0, 0, 16, 16);
|
|
|
|
|
2016-11-02 21:56:40 +01:00
|
|
|
// EASTER EGG
|
|
|
|
// glSetFont(PIDisplay.fonts[4]);
|
|
|
|
// glColor(0xFF000000);
|
|
|
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "A");
|
|
|
|
// glColor(0xFF800000);
|
|
|
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "B");
|
|
|
|
// glColor(0xFFeea28e);
|
|
|
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "C");
|
|
|
|
// glColor(0xFFee7255);
|
|
|
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "D");
|
|
|
|
// glColor(0xFFeac0b0);
|
|
|
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "E");
|
|
|
|
// glColor(0xFFf3d8ce);
|
|
|
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "F");
|
|
|
|
// glColor(0xffede7);
|
|
|
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "G");
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-09-12 16:30:51 +02:00
|
|
|
//DRAW MARIO
|
2017-02-02 10:30:45 +01:00
|
|
|
skin.use(DisplayManager.engine);
|
2017-01-31 22:29:49 +01:00
|
|
|
DisplayManager.renderer.glFillRect(getPosX() - 18, 25 + getPosY(), 35, 27, 35 * (marioSkinPos[0] + 1), 27 * marioSkinPos[1], 35, 27);
|
|
|
|
// 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);
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean mustBeRefreshed() {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean keyReleased(Key k) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean keyPressed(Key k) {
|
|
|
|
return false;
|
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-09-12 16:30:51 +02:00
|
|
|
private int getPosX() {
|
2017-01-31 22:29:49 +01:00
|
|
|
return (int) marioPos[0];
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-09-12 16:30:51 +02:00
|
|
|
private int getPosY() {
|
2017-01-31 22:29:49 +01:00
|
|
|
return (int) marioPos[1];
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
2016-09-02 20:32:37 +02:00
|
|
|
|
|
|
|
}
|