diff --git a/CM2030 Graphics Programming/Topic 4/4.5.1/index.html b/CM2030 Graphics Programming/Topic 4/4.5.1/index.html index c0b3c6d..75080dd 100644 --- a/CM2030 Graphics Programming/Topic 4/4.5.1/index.html +++ b/CM2030 Graphics Programming/Topic 4/4.5.1/index.html @@ -7,8 +7,9 @@ - + + diff --git a/CM2030 Graphics Programming/Topic 4/4.5.1/physics.js b/CM2030 Graphics Programming/Topic 4/4.5.1/physics.js index 9fac768..3d79042 100644 --- a/CM2030 Graphics Programming/Topic 4/4.5.1/physics.js +++ b/CM2030 Graphics Programming/Topic 4/4.5.1/physics.js @@ -16,13 +16,21 @@ function drawGround(){ //////////////////////////////////////////////////////////////// function setupPropeller(){ // your code here + propeller = Bodies.rectangle(150, 480, 200, 15, {isStatic: true, angle: 0}); + World.add(engine.world, [propeller]); } //////////////////////////////////////////////////////////////// //updates and draws the propeller function drawPropeller(){ + Body.setAngle(propeller, angle); + Body.setAngularVelocity(propeller, angleSpeed); push(); - // your code here + fill(255); + //translate(propeller.position.x, propeller.position.y); + //rotate(propeller.angle); + drawVertices(propeller.vertices); pop(); + angle += angleSpeed; } //////////////////////////////////////////////////////////////// function setupBird(){ @@ -35,19 +43,47 @@ function setupBird(){ //////////////////////////////////////////////////////////////// function drawBirds(){ push(); - //your code here + for (let i = 0; i < birds.length; i++) + { + drawVertices(birds[i].vertices); + if(isOffScreen(birds[i])) + { + World.remove(engine.world, birds[i]); + birds.splice(i, 1); + i--; + } + } pop(); + console.log("# Birds: ", birds.length); + console.log("# World Bodies: ", engine.world.bodies.length); } //////////////////////////////////////////////////////////////// //creates a tower of boxes function setupTower(){ - //you code here + boxes = Composites.stack(500, 100, 3, 6, 0, 0, + function(x,y){ + let partA = Bodies.rectangle(x, y, 80, 80, {density: 0.001}); + colors.push(Math.trunc(random(100, 255))); + return Body.create({parts: [partA]}); + }); + Composite.add(engine.world, [boxes]); } //////////////////////////////////////////////////////////////// //draws tower of boxes function drawTower(){ push(); - //your code here + for (let i = 0; i < boxes.bodies.length; i++) { + fill(0, colors[i], 0); + noStroke(); + drawVertices(boxes.bodies[i].vertices); + if(isOffScreen(boxes.bodies[i])) + { + World.remove(engine.world, boxes.bodies[i]); + boxes.bodies.splice(i, 1); + colors.splice(i, 1); + i--; + } + } pop(); } //////////////////////////////////////////////////////////////// diff --git a/CM2030 Graphics Programming/Topic 4/4.5.1/sketch.js b/CM2030 Graphics Programming/Topic 4/4.5.1/sketch.js index 34f82b1..a1e22f6 100644 --- a/CM2030 Graphics Programming/Topic 4/4.5.1/sketch.js +++ b/CM2030 Graphics Programming/Topic 4/4.5.1/sketch.js @@ -9,16 +9,18 @@ var Body = Matter.Body; var Constraint = Matter.Constraint; var Mouse = Matter.Mouse; var MouseConstraint = Matter.MouseConstraint; +let Composites = Matter.Composites; +let Composite = Matter.Composite; var engine; var propeller; -var boxes = []; +var boxes = null; var birds = []; var colors = []; var ground; var slingshotBird, slingshotConstraint; var angle=0; -var angleSpeed=0; +var angleSpeed=0.01; var canvas; //////////////////////////////////////////////////////////// function setup() { @@ -56,10 +58,10 @@ function draw() { //use arrow keys to control propeller function keyPressed(){ if (keyCode == LEFT_ARROW){ - //your code here + angleSpeed += 0.01; } else if (keyCode == RIGHT_ARROW){ - //your code here + angleSpeed -= 0.01; } } //////////////////////////////////////////////////////////// @@ -93,7 +95,8 @@ function mouseReleased(){ //tells you if a body is off-screen function isOffScreen(body){ var pos = body.position; - return (pos.y > height || pos.x<0 || pos.x>width); + return (pos.y > height) + // Modified so bodies don't disappear when they're not completely off the screen yet } //////////////////////////////////////////////////////////// //removes a body from the physics world