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