154 lines
3.5 KiB
Plaintext

//TODO
//- Start Screen
//- Level Editor (click with mouse spawns or deletes tiles)
// - Hotkey to slide the window right and left
// - Find a way to make menus
//- Movement berechnen mit move = gravitation - speed
// - Jump als Zahl, die langsam kleiner wird
// jumping related
float speed = 20;
float gravitation = 9.81;
float jumpheight;
float jumpcooldown = 12;
// for moving x-axis (mostly depracted)
// But dont delete yet!!
PVector direction = new PVector(0,0);
PVector pos = new PVector(220, 50);
int playerRadius = 25;
float actualPos;
PVector tilesize = new PVector(50, 50);
int[][] level;
int[][] loadJson(String jsonfile) {
JSONArray values = loadJSONArray(jsonfile);
// println(values.size());
int[][] arrayfromjson = new int[values.size()][values.size()];
for (int i = 0; i < values.size(); i++) {
JSONArray jsontoarray = values.getJSONArray(i);
int x = jsontoarray.getInt(0);
int y = jsontoarray.getInt(1);
int rectwidth = jsontoarray.getInt(2);
int rectheight = jsontoarray.getInt(3);
// arrayfromjson_x[i] = x;
arrayfromjson[i][0] = x;
arrayfromjson[i][1] = y;
arrayfromjson[i][2] = rectwidth;
arrayfromjson[i][3] = rectheight;
}
return arrayfromjson;
}
void menu() {
rectWithText(width/2, height/2, 100, 50, "test", 40);
}
void rectWithText(float rectX, float rectY, float rectWidth, float rectHeight, String rectText, float ts) {
// rect
rectMode(CENTER);
rect(rectX, rectY, rectWidth, rectHeight);
// text
textSize(ts);
textAlign(CENTER,CENTER);
fill(0);
text(rectText, rectX, rectY);
// stop painting
noFill();
}
// The actual game
void play() {
// calculate actual position on ground
actualPos = height - pos.y;
background(255);
// player
rectMode(CENTER);
rect(pos.x, pos.y, playerRadius, playerRadius);
moveTiles();
baseline();
// jumpToJumpheight();
newJump();
collisionTest();
generate_tiles();
helper();
// moveTiles();
}
// This is basically the Level file:
// It consists out of an array, that spawns tiles
// It is also checked in collisionTest()
int[] tiles_x = { 300, 50, 600, 50};
int[] tiles_y = { 500, 50, 600, 200 };
// TODO Collision erweitern wie in https://happycoding.io/tutorials/processing/collision-detection
void collisionTest() {
// Collision with baseline
if ( pos.y > baseline_y - playerRadius/2 ) {
pos.set(pos.x, baseline_y - playerRadius/2);
}
// Collision with all the tiles bottom site
for (int i = 0; i < level.length; i++) {
boolean xSideEdges = pos.x > level[i][0] - tilesize.x/2 && pos.x < level[i][0] + tilesize.x/2;
boolean ySideEdges = pos.y < level[i][1] + tilesize.y/2 && pos.y > level[i][1] - tilesize.y/2;
// Bottom
if ( (xSideEdges) && (ySideEdges)) {
pos.set(pos.x, level[i][1] + tilesize.y/2);
}
// Top
if ( (xSideEdges) && (pos.y < level[i][1] + tilesize.y/2 && pos.y > level[i][1] - tilesize.y/2 - playerRadius)) {
pos.set(pos.x, level[i][1] - tilesize.y/2 - 15);
}
}
}
void moveTiles() {
for (int i = 0; i < level.length; i++) {
level[i][0] = level[i][0] - 3;
}
}
int baseline_y = 700;
void baseline() {
line(0, baseline_y, width, baseline_y);
}
float movement;
float jumpspeed;
void newJump() {
movement = gravitation - jumpspeed;
pos.set(pos.x, pos.y + movement);
if (jumpspeed > 0) {
jumpspeed--;
}
}
// Neat helper function, that gives us coordinates of point while clicking
void helper() {
if (mousePressed == true){
println(mouseX, mouseY);
}
}