diff --git a/app.py b/app.py index 2afff7c..884e104 100644 --- a/app.py +++ b/app.py @@ -4,13 +4,32 @@ from tokenize import String from flask import Flask, request, jsonify from flask_cors import CORS -player1 = {"name": "Player 1", "xpos": 1, "ypos": 1} +player1 = {"name": "Player 1", "xpos": 1, "ypos": 1, "xvel": 0, "yvel": 0} + +map1 = { + "platforms": [ + {"x": 30, "y": 100, "width": 100, "height": 100}, + {"x": 0, "y": 260, "width": 400, "height": 10} + ] +} + +data = {} + +def checkCollision(): + global data + collision = False + for i in map1['platforms']: + if ((player1['ypos']+data['spriteData']['ufo']['height']/2 >= i['y']) & (player1['ypos']-data['spriteData']['ufo']['height']/2 <= i['y']+i['height']) & (player1['xpos']+data['spriteData']['ufo']['height']/2 >= i['x']) & (player1['xpos']-data['spriteData']['ufo']['width']/2 <= i['x']+i['width'])): + collision = True + + return(collision) app = Flask(__name__) CORS(app) @app.route('/api/send', methods=['POST']) def receive_data(): + global data data = request.get_json() # Input data is the form [reset(bool), isPressed(json)] @@ -18,18 +37,43 @@ def receive_data(): if (data['reset']): player1['xpos'] = 0 player1['ypos'] = 0 + player1['xvel'] = 0 + player1['yvel'] = 0 # Handle key presses if (data['keyDown']['ArrowUp'] == True): - player1['ypos'] -= 1 - if (data['keyDown']['ArrowDown'] == True): player1['ypos'] += 1 + if (checkCollision()): + player1['ypos'] -= 1 + player1['yvel'] = 2 + else: + player1['ypos'] -= 1 + if (data['keyDown']['ArrowDown'] == True): + print('LOW LOW LOW LOW LOW LOW LOW LOW') if (data['keyDown']['ArrowRight'] == True): player1['xpos'] += 1 + if (checkCollision()): + player1['xpos'] -= 1; if (data['keyDown']['ArrowLeft'] == True): player1['xpos'] -= 1 + if (checkCollision()): + player1['xpos'] += 1; - return jsonify(player1) + # Velocity + player1['xpos'] += player1['xvel'] + player1['ypos'] -= player1['yvel'] + + if (checkCollision()): + player1['ypos'] += player1['yvel'] + player1['yvel'] = 0 + + # Handle Gravity + player1['yvel'] -= 0.05 + + return jsonify({ + "player1": player1, + "map1": map1, + }) if __name__ == '__main__': app.run(debug=True) \ No newline at end of file diff --git a/index.html b/index.html index 7ed940c..d9257fb 100644 --- a/index.html +++ b/index.html @@ -1,3 +1,4 @@ + @@ -8,5 +9,6 @@ + \ No newline at end of file diff --git a/index.js b/index.js index 0669b1d..916a002 100644 --- a/index.js +++ b/index.js @@ -9,11 +9,18 @@ function sendData(data) { }) .then(res => res.json()) .then(data => { + // Clear Canvas ctx.clearRect(0, 0, 480, 270); - ctx.beginPath(); - ctx.arc(data.xpos, data.ypos, 10, 0, Math.PI * 2); - ctx.fill(); + + // Draw in Player 1 + ctx.drawImage(ufo, data.player1.xpos-spriteData.ufo.width/2, data.player1.ypos-spriteData.ufo.height/2) reset = false + + // Draw Hitboxes (For debugging) + let plat = data.map1.platforms + for (i = 0; i < plat.length; i++) { + ctx.fillRect(plat[i].x, plat[i].y, plat[i].width, plat[i].height) + } }) .catch(err => console.error('Error:', err)); } @@ -58,4 +65,4 @@ document.addEventListener('keyup', function (e) { // Start Game var reset = true -setInterval(() => sendData({reset, keyDown}), 16); \ No newline at end of file +setInterval(() => sendData({reset, keyDown, spriteData}), 16); \ No newline at end of file diff --git a/sprites.js b/sprites.js new file mode 100644 index 0000000..4ef38ce --- /dev/null +++ b/sprites.js @@ -0,0 +1,10 @@ +const ufo = new Image(); +ufo.src = "sprites/ufo.png"; + +const spriteData = { + "ufo": {} +}; +ufo.onload = function () { + spriteData.ufo.width = this.width; + spriteData.ufo.height = this.height; +} \ No newline at end of file diff --git a/sprites/ufo.png b/sprites/ufo.png new file mode 100644 index 0000000..0d826a4 Binary files /dev/null and b/sprites/ufo.png differ