static
This commit is contained in:
parent
f64438e536
commit
c04de03b43
14 changed files with 543 additions and 0 deletions
7
static/css/bootstrap.min.css
vendored
Normal file
7
static/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
70
static/css/style.css
Normal file
70
static/css/style.css
Normal file
|
@ -0,0 +1,70 @@
|
|||
@font-face { font-family: Virgo; src: url('../fonts/virgo.ttf'); }
|
||||
|
||||
body {
|
||||
background-color: #189ccf;
|
||||
font-family: Virgo, monospace;
|
||||
}
|
||||
|
||||
.header-img {
|
||||
width: 100%;
|
||||
max-width: 600px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.link {
|
||||
margin-top: 20px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
width: 150px;
|
||||
padding-right: 10px;
|
||||
display: inline;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 45px;
|
||||
}
|
||||
|
||||
#band-img-1 {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.iframe-container {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
padding-top: 56.25%; /* 16:9 Aspect Ratio (divide 9 by 16 = 0.5625) */
|
||||
}
|
||||
|
||||
.responsive-iframe {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.navi-link {
|
||||
color: #ff0000;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.navi-link:hover {
|
||||
opacity: 70%;
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
.contact-container {
|
||||
color: #20d582;
|
||||
background-color: #8220d5;
|
||||
}
|
||||
|
||||
.footer-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
BIN
static/fonts/nabla.ttf
Normal file
BIN
static/fonts/nabla.ttf
Normal file
Binary file not shown.
BIN
static/fonts/virgo.ttf
Normal file
BIN
static/fonts/virgo.ttf
Normal file
Binary file not shown.
BIN
static/img/album_release_header.png
Normal file
BIN
static/img/album_release_header.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
BIN
static/img/band_1.jpg
Normal file
BIN
static/img/band_1.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 113 KiB |
BIN
static/img/band_banner.jpg
Normal file
BIN
static/img/band_banner.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 145 KiB |
BIN
static/img/bugman_sticker.png
Normal file
BIN
static/img/bugman_sticker.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 242 KiB |
BIN
static/img/members.png
Normal file
BIN
static/img/members.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.7 MiB |
BIN
static/img/shrinkin_minkin_album_header.png
Normal file
BIN
static/img/shrinkin_minkin_album_header.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 47 KiB |
7
static/js/bootstrap.min.js
vendored
Normal file
7
static/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
static/js/p5.min.js
vendored
Normal file
2
static/js/p5.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
230
static/js/sketch.js
Normal file
230
static/js/sketch.js
Normal file
|
@ -0,0 +1,230 @@
|
|||
let myFont;
|
||||
function preload() {
|
||||
myFont = loadFont('assets/fonts/nabla.ttf');
|
||||
}
|
||||
|
||||
function setup() {
|
||||
if (windowWidth <= 480) {
|
||||
var canvas = createCanvas(windowWidth, 200);
|
||||
} else {
|
||||
var canvas = createCanvas(windowWidth, 300);
|
||||
}
|
||||
canvas.parent('shrinkin-sketch')
|
||||
}
|
||||
|
||||
function windowResized() {
|
||||
if (windowWidth <= 480) {
|
||||
var canvas = resizeCanvas(windowWidth, 200);
|
||||
} else {
|
||||
var canvas = resizeCanvas(windowWidth, 300);
|
||||
}
|
||||
}
|
||||
|
||||
class Ball {
|
||||
constructor(x, y, r) {
|
||||
this.position = new p5.Vector(x, y);
|
||||
this.velocity = p5.Vector.random2D();
|
||||
this.velocity.mult(3);
|
||||
this.r = r;
|
||||
this.m = r * 0.1;
|
||||
|
||||
|
||||
}
|
||||
|
||||
update() {
|
||||
this.position.add(this.velocity);
|
||||
}
|
||||
|
||||
checkBoundaryCollision() {
|
||||
if (this.position.x > width - this.r) {
|
||||
this.position.x = width - this.r;
|
||||
this.velocity.x *= -1;
|
||||
} else if (this.position.x < this.r) {
|
||||
this.position.x = this.r;
|
||||
this.velocity.x *= -1;
|
||||
} else if (this.position.y > height - this.r) {
|
||||
this.position.y = height - this.r;
|
||||
this.velocity.y *= -1;
|
||||
} else if (this.position.y < this.r) {
|
||||
this.position.y = this.r;
|
||||
this.velocity.y *= -1;
|
||||
}
|
||||
}
|
||||
|
||||
checkCollision(other) {
|
||||
// Get distances between the balls components
|
||||
let distanceVect = p5.Vector.sub(other.position, this.position);
|
||||
|
||||
// Calculate magnitude of the vector separating the balls
|
||||
let distanceVectMag = distanceVect.mag();
|
||||
|
||||
// Minimum distance before they are touching
|
||||
let minDistance = this.r + other.r;
|
||||
|
||||
if (distanceVectMag < minDistance) {
|
||||
let distanceCorrection = (minDistance - distanceVectMag) / 2.0;
|
||||
let d = distanceVect.copy();
|
||||
let correctionVector = d.normalize().mult(distanceCorrection);
|
||||
other.position.add(correctionVector);
|
||||
this.position.sub(correctionVector);
|
||||
|
||||
// get angle of distanceVect
|
||||
let theta = distanceVect.heading();
|
||||
// precalculate trig values
|
||||
let sine = sin(theta);
|
||||
let cosine = cos(theta);
|
||||
|
||||
/* bTemp will hold rotated ball this.positions. You
|
||||
just need to worry about bTemp[1] this.position*/
|
||||
let bTemp = [new p5.Vector(), new p5.Vector()];
|
||||
|
||||
/* this ball's this.position is relative to the other
|
||||
so you can use the vector between them (bVect) as the
|
||||
reference point in the rotation expressions.
|
||||
bTemp[0].this.position.x and bTemp[0].this.position.y will initialize
|
||||
automatically to 0.0, which is what you want
|
||||
since b[1] will rotate around b[0] */
|
||||
bTemp[1].x = cosine * distanceVect.x + sine * distanceVect.y;
|
||||
bTemp[1].y = cosine * distanceVect.y - sine * distanceVect.x;
|
||||
|
||||
// rotate Temporary velocities
|
||||
let vTemp = [new p5.Vector(), new p5.Vector()];
|
||||
|
||||
vTemp[0].x = cosine * this.velocity.x + sine * this.velocity.y;
|
||||
vTemp[0].y = cosine * this.velocity.y - sine * this.velocity.x;
|
||||
vTemp[1].x = cosine * other.velocity.x + sine * other.velocity.y;
|
||||
vTemp[1].y = cosine * other.velocity.y - sine * other.velocity.x;
|
||||
|
||||
/* Now that velocities are rotated, you can use 1D
|
||||
conservation of momentum equations to calculate
|
||||
the final this.velocity along the x-axis. */
|
||||
let vFinal = [new p5.Vector(), new p5.Vector()];
|
||||
|
||||
// final rotated this.velocity for b[0]
|
||||
vFinal[0].x =
|
||||
((this.m - other.m) * vTemp[0].x + 2 * other.m * vTemp[1].x) /
|
||||
(this.m + other.m);
|
||||
vFinal[0].y = vTemp[0].y;
|
||||
|
||||
// final rotated this.velocity for b[0]
|
||||
vFinal[1].x =
|
||||
((other.m - this.m) * vTemp[1].x + 2 * this.m * vTemp[0].x) /
|
||||
(this.m + other.m);
|
||||
vFinal[1].y = vTemp[1].y;
|
||||
|
||||
// hack to avoid clumping
|
||||
bTemp[0].x += vFinal[0].x;
|
||||
bTemp[1].x += vFinal[1].x;
|
||||
|
||||
/* Rotate ball this.positions and velocities back
|
||||
Reverse signs in trig expressions to rotate
|
||||
in the opposite direction */
|
||||
// rotate balls
|
||||
let bFinal = [new p5.Vector(), new p5.Vector()];
|
||||
|
||||
bFinal[0].x = cosine * bTemp[0].x - sine * bTemp[0].y;
|
||||
bFinal[0].y = cosine * bTemp[0].y + sine * bTemp[0].x;
|
||||
bFinal[1].x = cosine * bTemp[1].x - sine * bTemp[1].y;
|
||||
bFinal[1].y = cosine * bTemp[1].y + sine * bTemp[1].x;
|
||||
|
||||
// update balls to screen this.position
|
||||
other.position.x = this.position.x + bFinal[1].x;
|
||||
other.position.y = this.position.y + bFinal[1].y;
|
||||
|
||||
this.position.add(bFinal[0]);
|
||||
|
||||
// update velocities
|
||||
this.velocity.x = cosine * vFinal[0].x - sine * vFinal[0].y;
|
||||
this.velocity.y = cosine * vFinal[0].y + sine * vFinal[0].x;
|
||||
other.velocity.x = cosine * vFinal[1].x - sine * vFinal[1].y;
|
||||
other.velocity.y = cosine * vFinal[1].y + sine * vFinal[1].x;
|
||||
}
|
||||
}
|
||||
|
||||
display(friend1, friend2) {
|
||||
this.update()
|
||||
noStroke();
|
||||
fill('#ff0000');
|
||||
ellipse(this.position.x, this.position.y, this.r * 2, this.r * 2);
|
||||
this.checkBoundaryCollision()
|
||||
this.checkCollision(friend1)
|
||||
this.checkCollision(friend2)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class Logo {
|
||||
constructor() {
|
||||
this.yOffset = 0
|
||||
this.up = false
|
||||
this.textSize = 36
|
||||
this.bounceDepth = 10
|
||||
this.speed = 0.2
|
||||
}
|
||||
|
||||
display() {
|
||||
fill('#20d582');
|
||||
textFont(myFont);
|
||||
|
||||
if (windowWidth/6 > 120) {
|
||||
textSize(120);
|
||||
} else {
|
||||
textSize(windowWidth/6)
|
||||
}
|
||||
|
||||
if (windowWidth <= 480) {
|
||||
text('shrinkin', width/2 - 120, 20 + 60 + this.yOffset);
|
||||
text('-minkin', width/2 - 120, 100 + 60 + this.yOffset);
|
||||
} else {
|
||||
text('shrinkin', width/2 - 120, 50 + 90 + this.yOffset);
|
||||
text('-minkin', width/2 - 120, 150 + 90 + this.yOffset);
|
||||
}
|
||||
|
||||
this.bounce()
|
||||
}
|
||||
|
||||
bounce() {
|
||||
if (!this.up) {
|
||||
if (this.yOffset <= this.bounceDepth) {
|
||||
this.yOffset = this.yOffset + this.speed
|
||||
}
|
||||
if (this.yOffset > this.bounceDepth) {
|
||||
this.up = true
|
||||
}
|
||||
} else {
|
||||
if (this.yOffset > 0) {
|
||||
this.yOffset = this.yOffset - this.speed
|
||||
}
|
||||
if (this.yOffset < 0) {
|
||||
this.up = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let ball1 = new Ball(100, 400, 20)
|
||||
let ball2 = new Ball(700, 400, 80)
|
||||
let ball3 = new Ball(0, 200, 60)
|
||||
let logo = new Logo()
|
||||
|
||||
|
||||
function draw() {
|
||||
background('#209bd0');
|
||||
|
||||
|
||||
ball1.display(ball2, ball3)
|
||||
ball2.display(ball1, ball3)
|
||||
ball3.display(ball1, ball2)
|
||||
|
||||
if (windowWidth <= 480) {
|
||||
ball2.r = 40;
|
||||
ball3.r = 30;
|
||||
} else {
|
||||
ball2.r = 80;
|
||||
ball3.r = 60;
|
||||
}
|
||||
|
||||
logo.display()
|
||||
|
||||
}
|
227
static/js/sketch_export.js
Normal file
227
static/js/sketch_export.js
Normal file
|
@ -0,0 +1,227 @@
|
|||
let myFont;
|
||||
function preload() {
|
||||
myFont = loadFont('assets/fonts/nabla.ttf');
|
||||
}
|
||||
|
||||
function setup() {
|
||||
var canvas = createCanvas(1200, 400);
|
||||
canvas.parent('shrinkin-sketch')
|
||||
createLoop({duration:120, gif:true})
|
||||
}
|
||||
|
||||
function windowResized() {
|
||||
if (windowWidth <= 480) {
|
||||
var canvas = resizeCanvas(windowWidth, 200);
|
||||
} else {
|
||||
var canvas = resizeCanvas(windowWidth, 300);
|
||||
}
|
||||
}
|
||||
|
||||
class Ball {
|
||||
constructor(x, y, r) {
|
||||
this.position = new p5.Vector(x, y);
|
||||
this.velocity = p5.Vector.random2D();
|
||||
this.velocity.mult(3);
|
||||
this.r = r;
|
||||
this.m = r * 0.1;
|
||||
|
||||
|
||||
}
|
||||
|
||||
update() {
|
||||
this.position.add(this.velocity);
|
||||
}
|
||||
|
||||
checkBoundaryCollision() {
|
||||
if (this.position.x > width - this.r) {
|
||||
this.position.x = width - this.r;
|
||||
this.velocity.x *= -1;
|
||||
} else if (this.position.x < this.r) {
|
||||
this.position.x = this.r;
|
||||
this.velocity.x *= -1;
|
||||
} else if (this.position.y > height - this.r) {
|
||||
this.position.y = height - this.r;
|
||||
this.velocity.y *= -1;
|
||||
} else if (this.position.y < this.r) {
|
||||
this.position.y = this.r;
|
||||
this.velocity.y *= -1;
|
||||
}
|
||||
}
|
||||
|
||||
checkCollision(other) {
|
||||
// Get distances between the balls components
|
||||
let distanceVect = p5.Vector.sub(other.position, this.position);
|
||||
|
||||
// Calculate magnitude of the vector separating the balls
|
||||
let distanceVectMag = distanceVect.mag();
|
||||
|
||||
// Minimum distance before they are touching
|
||||
let minDistance = this.r + other.r;
|
||||
|
||||
if (distanceVectMag < minDistance) {
|
||||
let distanceCorrection = (minDistance - distanceVectMag) / 2.0;
|
||||
let d = distanceVect.copy();
|
||||
let correctionVector = d.normalize().mult(distanceCorrection);
|
||||
other.position.add(correctionVector);
|
||||
this.position.sub(correctionVector);
|
||||
|
||||
// get angle of distanceVect
|
||||
let theta = distanceVect.heading();
|
||||
// precalculate trig values
|
||||
let sine = sin(theta);
|
||||
let cosine = cos(theta);
|
||||
|
||||
/* bTemp will hold rotated ball this.positions. You
|
||||
just need to worry about bTemp[1] this.position*/
|
||||
let bTemp = [new p5.Vector(), new p5.Vector()];
|
||||
|
||||
/* this ball's this.position is relative to the other
|
||||
so you can use the vector between them (bVect) as the
|
||||
reference point in the rotation expressions.
|
||||
bTemp[0].this.position.x and bTemp[0].this.position.y will initialize
|
||||
automatically to 0.0, which is what you want
|
||||
since b[1] will rotate around b[0] */
|
||||
bTemp[1].x = cosine * distanceVect.x + sine * distanceVect.y;
|
||||
bTemp[1].y = cosine * distanceVect.y - sine * distanceVect.x;
|
||||
|
||||
// rotate Temporary velocities
|
||||
let vTemp = [new p5.Vector(), new p5.Vector()];
|
||||
|
||||
vTemp[0].x = cosine * this.velocity.x + sine * this.velocity.y;
|
||||
vTemp[0].y = cosine * this.velocity.y - sine * this.velocity.x;
|
||||
vTemp[1].x = cosine * other.velocity.x + sine * other.velocity.y;
|
||||
vTemp[1].y = cosine * other.velocity.y - sine * other.velocity.x;
|
||||
|
||||
/* Now that velocities are rotated, you can use 1D
|
||||
conservation of momentum equations to calculate
|
||||
the final this.velocity along the x-axis. */
|
||||
let vFinal = [new p5.Vector(), new p5.Vector()];
|
||||
|
||||
// final rotated this.velocity for b[0]
|
||||
vFinal[0].x =
|
||||
((this.m - other.m) * vTemp[0].x + 2 * other.m * vTemp[1].x) /
|
||||
(this.m + other.m);
|
||||
vFinal[0].y = vTemp[0].y;
|
||||
|
||||
// final rotated this.velocity for b[0]
|
||||
vFinal[1].x =
|
||||
((other.m - this.m) * vTemp[1].x + 2 * this.m * vTemp[0].x) /
|
||||
(this.m + other.m);
|
||||
vFinal[1].y = vTemp[1].y;
|
||||
|
||||
// hack to avoid clumping
|
||||
bTemp[0].x += vFinal[0].x;
|
||||
bTemp[1].x += vFinal[1].x;
|
||||
|
||||
/* Rotate ball this.positions and velocities back
|
||||
Reverse signs in trig expressions to rotate
|
||||
in the opposite direction */
|
||||
// rotate balls
|
||||
let bFinal = [new p5.Vector(), new p5.Vector()];
|
||||
|
||||
bFinal[0].x = cosine * bTemp[0].x - sine * bTemp[0].y;
|
||||
bFinal[0].y = cosine * bTemp[0].y + sine * bTemp[0].x;
|
||||
bFinal[1].x = cosine * bTemp[1].x - sine * bTemp[1].y;
|
||||
bFinal[1].y = cosine * bTemp[1].y + sine * bTemp[1].x;
|
||||
|
||||
// update balls to screen this.position
|
||||
other.position.x = this.position.x + bFinal[1].x;
|
||||
other.position.y = this.position.y + bFinal[1].y;
|
||||
|
||||
this.position.add(bFinal[0]);
|
||||
|
||||
// update velocities
|
||||
this.velocity.x = cosine * vFinal[0].x - sine * vFinal[0].y;
|
||||
this.velocity.y = cosine * vFinal[0].y + sine * vFinal[0].x;
|
||||
other.velocity.x = cosine * vFinal[1].x - sine * vFinal[1].y;
|
||||
other.velocity.y = cosine * vFinal[1].y + sine * vFinal[1].x;
|
||||
}
|
||||
}
|
||||
|
||||
display(friend1, friend2) {
|
||||
this.update()
|
||||
noStroke();
|
||||
fill('#ff0000');
|
||||
ellipse(this.position.x, this.position.y, this.r * 2, this.r * 2);
|
||||
this.checkBoundaryCollision()
|
||||
this.checkCollision(friend1)
|
||||
this.checkCollision(friend2)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class Logo {
|
||||
constructor() {
|
||||
this.yOffset = 0
|
||||
this.up = false
|
||||
this.textSize = 36
|
||||
this.bounceDepth = 10
|
||||
this.speed = 0.2
|
||||
}
|
||||
|
||||
display() {
|
||||
fill('#20d582');
|
||||
textFont(myFont);
|
||||
|
||||
if (windowWidth/6 > 120) {
|
||||
textSize(120);
|
||||
} else {
|
||||
textSize(windowWidth/6)
|
||||
}
|
||||
|
||||
if (windowWidth <= 480) {
|
||||
text('shrinkin', width/2 - 120, 20 + 60 + this.yOffset);
|
||||
text('-minkin', width/2 - 120, 100 + 60 + this.yOffset);
|
||||
} else {
|
||||
text('shrinkin', width/2 - 120, 50 + 90 + this.yOffset);
|
||||
text('-minkin', width/2 - 120, 150 + 90 + this.yOffset);
|
||||
}
|
||||
|
||||
this.bounce()
|
||||
}
|
||||
|
||||
bounce() {
|
||||
if (!this.up) {
|
||||
if (this.yOffset <= this.bounceDepth) {
|
||||
this.yOffset = this.yOffset + this.speed
|
||||
}
|
||||
if (this.yOffset > this.bounceDepth) {
|
||||
this.up = true
|
||||
}
|
||||
} else {
|
||||
if (this.yOffset > 0) {
|
||||
this.yOffset = this.yOffset - this.speed
|
||||
}
|
||||
if (this.yOffset < 0) {
|
||||
this.up = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let ball1 = new Ball(100, 400, 20)
|
||||
let ball2 = new Ball(700, 400, 80)
|
||||
let ball3 = new Ball(0, 200, 60)
|
||||
let logo = new Logo()
|
||||
|
||||
|
||||
function draw() {
|
||||
background('#209bd0');
|
||||
|
||||
|
||||
ball1.display(ball2, ball3)
|
||||
ball2.display(ball1, ball3)
|
||||
ball3.display(ball1, ball2)
|
||||
|
||||
if (windowWidth <= 480) {
|
||||
ball2.r = 40;
|
||||
ball3.r = 30;
|
||||
} else {
|
||||
ball2.r = 80;
|
||||
ball3.r = 60;
|
||||
}
|
||||
|
||||
logo.display()
|
||||
|
||||
}
|
Loading…
Reference in a new issue