//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); } }