fixed stuff

master
poni 3 years ago
parent cca55951ed
commit cdaed2fb4e

1
.gitignore vendored

@ -0,0 +1 @@
**/.ipynb_checkpoints

@ -6,7 +6,19 @@ function randomNumber(min,max) {
return Math.floor(Math.random() * (max - min) + min);
};
var x = randomNumber(0,9);
function openWindow(c) {
if /* if we're on iOS, open in Apple Maps */
((navigator.platform.indexOf("iPhone") != -1) ||
(navigator.platform.indexOf("iPad") != -1) ||
(navigator.platform.indexOf("iPod") != -1))
window.open(`maps://http://www.google.com/maps/place/${c}`); else /* else use Google */
window.open(`http://www.google.com/maps/place/${c}`, "_self");
}
var x = randomNumber(null,5);
var y = randomNumber(0,2);
console.log(x)
@ -14,11 +26,12 @@ var x = randomNumber(0,9);
function preload() {
footsteps = document.getElementById("footsteps");//walking
//PNF1 = document.getElementById("PNF1");
//PNF2 = document.getElementById("PNF2");
PNF1 = document.getElementById("PNF1");
PNF2 = document.getElementById("PNF2");
LOBS1 = document.getElementById("LOBS1");
LOBS2= document.getElementById("LOBS2");
GARDE = document.getElementById("GARDE");
LOBS2 = document.getElementById("LOBS2");
GARDE = document.getElementById("GARDE1");
GARDE = document.getElementById("GARDE2");
SONIC1 = document.getElementById("SONIC1 ");
SONIC2 = document.getElementById("SONIC2");
PIGEON1 = document.getElementById("PIGEON1 ");
@ -39,18 +52,20 @@ myFont = loadFont("ApfelGrotezk-Regular.ttf", fontRead);
myFont13 = loadFont("typefaces/TINY5x3-260.ttf", fontRead);
myFont14 = loadFont("typefaces/TINY5x3-280.ttf", fontRead);
var SOU =["LOBS1", "LOBS2", "GARDE", "SONIC1", "SONIC2", "PIGEON1", "PIGEON2"]
sou = SOU[x];
console.log(sou)
};
var HOTSPOT = {
names: ["Hotspot name:\nTHE SECRET GARDEN", "Hotspot name:\nSONIC THE SELLOUT", "Hotspot name:\nSONIC THE SELLOUT", "Hotspot name:\nPIGEON PLAZA", "Hotspot name:\nPIGEON PLAZA"],
coord: ["52.073237, 4.314601", "52.076413, 4.308312", "52.07863, 4.303875","52.072243, 4.311191", "52.074982, 4.311327", "52.073237, 4.314601", "52.076413, 4.308312", "52.07863, 4.303875"],
};
var SOU =[[PNF1, PNF2],[LOBS1, LOBS2],[GARDE1, GARDE2], [SONIC1, SONIC2], [PIGEON1, PIGEON2]]
let sou = SOU[x][y];
var HOTSPOT = {
names: ["Hotspot name:\nPLACE NOT FOUND", "Hotspot name:\nLOBSTER LOUNGE", "Hotspot name:\nTHE SECRET GARDEN", "Hotspot name:\nSONIC THE SELLOUT", "Hotspot name:\nPIGEON PLAZA"],
coord: ["52.07242636201861,\n4.311324269227487","52.07494151159389,\n4.311367399049404","52.073236822099176,\n4.314598358985356","52.07642086169303,\n4.3083705464802105","52.07863969677628,\n4.304184010905719"],
};
// Place not found 1
@ -109,8 +124,8 @@ var stage = 0;
//0 =splash
//1 =pong
var coordinateX = Math.random() * window.innerWidth;
var coordinateY = Math.random() * window.innerHeight;
var coordinateX = Math.random() * window.innerWidth-100;
var coordinateY = Math.random() * window.innerHeight-100;
var letterSize = 50;
@ -176,21 +191,21 @@ function draw(){
if (stage == 1){
splash2();//run splash2
}
if(stage == 1 && clicks == 3){
if(stage == 1 && clicks == 4){
stage = 2;//run splash2
}//close 1
if (stage == 2){
splash3();//run splash3
}
if(stage == 2 && clicks == 4){
if(stage == 2 && clicks == 6){
stage = 3;//run splash3
}//close 2
if (stage == 3){
splash4();//run splash4
}
if(stage == 3 && clicks == 5){
if(stage == 3 && clicks == 8){
stage = 4;//run splash4
}//close 3
if (stage == 4){
@ -204,13 +219,13 @@ function draw(){
//text(clicks, width/2, height/2);
}//close 2
if(stage == 6){ //player 1 wins
p1Wins();
}//close 3
if(stage == 7){ //player 2 wins
p2Wins();
}//close 4
// if(stage == 6){ //player 1 wins
// p1Wins();
// }//close 3
//
// if(stage == 7){ //player 2 wins
// p2Wins();
// }//close 4
@ -296,31 +311,31 @@ function splash4(){
}
function p1Wins(){
//function p1Wins(){
//P1 Win screen
r = map(mouseX, 0, windowHeight, 0, 255);
g = map(mouseY, 0, windowHeight, 255, 0);
b = map(mouseX, 0, windowWidth, 0, 255);
// r = map(mouseX, 0, windowHeight, 0, 255);
// g = map(mouseY, 0, windowHeight, 255, 0);
// b = map(mouseX, 0, windowWidth, 0, 255);
// col = mouseX/2;
background(r, g, b);
fill(255);
textSize(25);
textFont(myFont);
text('Refresh to launch a new ball', width/2, height/2);
// background(r, g, b);
// fill(255);
// textSize(25);
// textFont(myFont);
// text('Refresh to launch a new ball', width/2, height/2);
}//close P1
//}//close P1
function p2Wins(){
//function p2Wins(){
//P2 Win screen
background(163);
fill(255);
// background(163);
// fill(255);
textSize(20);
textFont(myFont);
text('Refresh to launch a new ball', width/2, height/2);
}//close P2
// textSize(20);
// textFont(myFont);
// text('Refresh to launch a new ball', width/2, height/2);
//}//close P2
function windowResized() {
@ -397,22 +412,26 @@ function pong() {
console.log(hit)
}
if (hit == true){
PNF1.play();
inside = true;
sou.play();
inside = true;
} else {
if (inside){
if (capture){
//inside bounce
ballDirectionX = ballDirectionX*-1;
ballDirectionY = ballDirectionY*-1;
} else {
inside = false;
}
}
}
fill(255);
// text(cheatcode, 100, 100);
@ -425,7 +444,7 @@ function pong() {
textFont(myFont);
textAlign(TOP);
textLeading(width/20);
text("I Don't Know Where We're Going, But\nyou are "+e+"px away from finding a hotspot ", width/2, 70);
text("I Don't Know Where We're Going, But\nyou are "+e+"px away from finding a hotspot ", width/2, 70);
textSize(width/35);
textFont(myFont);
textAlign(CENTER);
@ -436,11 +455,7 @@ text("I Don't Know Where We're Going, But\nyou are "+e+"px away from finding a h
//background(r, g, b);
} else if (hit == true) {
background(0,0,0);
//click.loop = false;
//text('Your mouse is inside the hotspot range range at: '+ mouseX + ' pixels (x) /' + mouseY + ' pixels (y)', width/2, 280);
// clear();
if(mouseIsPressed == true) {
// if the mouse is pressed, while the ball is in the circle
// big text at the top
@ -462,8 +477,13 @@ text("I Don't Know Where We're Going, But\nyou are "+e+"px away from finding a h
textSize(width/17);
text(coord , width/2, height/2);
fill(0);
//layer1.play();//sirens
} else {
if(mouseReleased){
openWindow(coord);
}
}
else {
// if the mouse is not pressed, while the ball is in the circle
// big text at the top
coordinateBallColored();

@ -13,56 +13,56 @@
location='ZIPFILES/pprgm/';
}//OK
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "BORDERS") {
location='ZIPFILES/BORDERS.zip/';
location='ZIPFILES/BORDERS.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "LIFE") {
location='ZIPFILES/LIFE.zip/';
location='ZIPFILES/LIFE.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "FUTURE") {
location='ZIPFILES/FUTURE.zip/';
location='ZIPFILES/FUTURE.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "DIALOGUE") {
location='ZIPFILES/DIALOGUE.zip/';
location='ZIPFILES/DIALOGUE.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "BREATH") {
location='ZIPFILES/BREATH.zip/';
location='ZIPFILES/BREATH.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "CAPITALISM") {
location='ZIPFILES/CAPITALISM.zip/';
location='ZIPFILES/CAPITALISM.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "GAMES") {
location='ZIPFILES/CAPITALISM.zip/';
location='ZIPFILES/GAMES.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "SYNERGY") {
location='ZIPFILES/SINERGY.zip/';
location='ZIPFILES/SINERGY.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "DEATH") {
location='ZIPFILES/DEATH.zip/';
location='ZIPFILES/DEATH.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "VIRUS") {
location='ZIPFILES/VIRUS.zip/';
location='ZIPFILES/VIRUS.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "THEWHOLE") {
location='ZIPFILES/THEWHOLE.zip/';
location='ZIPFILES/THEWHOLE.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "CAT") {
location='https://hub.xpub.nl/sandbot/PrototypingTimes/sketches/Euna/';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "APPOINTMENT") {
location='ZIPFILES/APPOINTMENT.zip/';
location='ZIPFILES/appointment/';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "PRAXIS") {
location='ZIPFILES/PRAXIS.zip/';
location='ZIPFILES/PRAXIS.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "OFFLINE") {
location='ZIPFILES/offline.zip/';
location='ZIPFILES/OFFLINE.zip';
} //OK
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "SAVIOR") {
location='ZIPFILES/SAVIOR.zip/';
location='ZIPFILES/SAVIOR.zip';
}
if (document.querySelector ("input[type='toxt']").value.toUpperCase() === "THISISNOTART") {
location='ZIPFILES/thisisnotart.zip/';
location='ZIPFILES/thisisnotart.zip';
}
else {

@ -10,13 +10,13 @@
<script src="p5.min.js"></script>
<script src="p5.dom.min.js"></script>
<script src="p5.sound.js"></script>
<script src="https://unpkg.com/p5.collide2d"></script>
<script src="p5.collide2d.js"></script>
<script type="text/javascript"></script>
<title>I Don't Know Where We're Going, But..</title>
<!--------------- INPUT CODE ---------------------------------->
<!--
<div class="overlay">
<button id="code-input" value="myimage" onclick="openInput()">Enter code
</button>
@ -24,7 +24,7 @@
<div id="input">
<input type="toxt" id="fname" name="firstname" placeholder="">
</div> -->
</div>
<!--------------- PRINT BUTTON (OPTIONAL)----------------------------->
@ -161,9 +161,9 @@ This license does not apply to the materials that were created by third party cr
<audio controls loop id="PIGEON1" src="sounds/pigeonsquare_04.mp3"></audio>
<audio controls loop id="PIGEON2" src="sounds/pigeonsquare_05.mp3"></audio>
<audio controls loop id="GARDE" src="sounds/spinoza_01.mp3"></audio>
<!-- <audio controls loop id="spinoza2" src="sounds/spinoza_02.mp3"></audio>
<audio controls loop id="spinoza3" src="sounds/spinoza_03.mp3"></audio> -->
<audio controls loop id="GARDE1" src="sounds/spinoza_01.mp3"></audio>
<audio controls loop id="GARDE2" src="sounds/spinoza_02.mp3"></audio>
<!-- <audio controls loop id="spinoza3" src="sounds/spinoza_03.mp3"></audio> -->
</div>

@ -0,0 +1,521 @@
/*
Repo: https://github.com/bmoren/p5.collide2D/
Created by http://benmoren.com
Some functions and code modified version from http://www.jeffreythompson.org/collision-detection
Version v0.7.3 | June 22, 2020
CC BY-NC-SA 4.0
*/
console.log("### p5.collide v0.7.3 ###")
p5.prototype._collideDebug = false;
p5.prototype.collideDebug = function(debugMode){
_collideDebug = debugMode;
}
/*~++~+~+~++~+~++~++~+~+~ 2D ~+~+~++~+~++~+~+~+~+~+~+~+~+~+~+*/
p5.prototype.collideRectRect = function (x, y, w, h, x2, y2, w2, h2) {
//2d
//add in a thing to detect rectMode CENTER
if (x + w >= x2 && // r1 right edge past r2 left
x <= x2 + w2 && // r1 left edge past r2 right
y + h >= y2 && // r1 top edge past r2 bottom
y <= y2 + h2) { // r1 bottom edge past r2 top
return true;
}
return false;
};
// p5.vector version of collideRectRect
p5.prototype.collideRectRectVector = function(p1, sz, p2, sz2){
return p5.prototype.collideRectRect(p1.x, p1.y, sz.x, sz.y, p2.x, p2.y, sz2.x,sz2.y)
}
p5.prototype.collideRectCircle = function (rx, ry, rw, rh, cx, cy, diameter) {
//2d
// temporary variables to set edges for testing
var testX = cx;
var testY = cy;
// which edge is closest?
if (cx < rx){ testX = rx // left edge
}else if (cx > rx+rw){ testX = rx+rw } // right edge
if (cy < ry){ testY = ry // top edge
}else if (cy > ry+rh){ testY = ry+rh } // bottom edge
// // get distance from closest edges
var distance = this.dist(cx,cy,testX,testY)
// if the distance is less than the radius, collision!
if (distance <= diameter/2) {
return true;
}
return false;
};
// p5.vector version of collideRectCircle
p5.prototype.collideRectCircleVector = function(r, sz, c, diameter){
return p5.prototype.collideRectCircle(r.x,r.y, sz.x,sz.y, c.x,c.y, diameter)
}
p5.prototype.collideCircleCircle = function (x, y,d, x2, y2, d2) {
//2d
if( this.dist(x,y,x2,y2) <= (d/2)+(d2/2) ){
return true;
}
return false;
};
// p5.vector version of collideCircleCircle
p5.prototype.collideCircleCircleVector = function(p1,d, p2, d2){
return p5.prototype.collideCircleCircle(p1.x,p1.y, d, p2.x,p2.y, d2)
}
p5.prototype.collidePointCircle = function (x, y, cx, cy, d) {
//2d
if( this.dist(x,y,cx,cy) <= d/2 ){
return true;
}
return false;
};
// p5.vector version of collidePointCircle
p5.prototype.collidePointCircleVector = function(p, c, d){
return p5.prototype.collidePointCircle(p.x,p.y,c.x,c.y, d)
}
p5.prototype.collidePointEllipse = function (x, y, cx, cy, dx, dy) {
//2d
var rx = dx/2, ry = dy/2;
// Discarding the points outside the bounding box
if (x > cx + rx || x < cx - rx ||y > cy + ry || y < cy - ry) {
return false;
}
// Compare the point to its equivalent on the ellipse
var xx = x - cx, yy = y - cy;
var eyy = ry * this.sqrt(this.abs(rx * rx - xx * xx)) / rx;
return yy <= eyy && yy >= -eyy;
};
// p5.vector version of collidePointEllipse
p5.prototype.collidePointEllipseVector = function(p, c, d){
return p5.prototype.collidePointEllipse(p.x,p.y,c.x,c.y,d.x,d.y);
}
p5.prototype.collidePointRect = function (pointX, pointY, x, y, xW, yW) {
//2d
if (pointX >= x && // right of the left edge AND
pointX <= x + xW && // left of the right edge AND
pointY >= y && // below the top AND
pointY <= y + yW) { // above the bottom
return true;
}
return false;
};
// p5.vector version of collidePointRect
p5.prototype.collidePointRectVector = function(point, p1, sz){
return p5.prototype.collidePointRect(point.x, point.y, p1.x, p1.y, sz.x, sz.y);
}
p5.prototype.collidePointLine = function(px,py,x1,y1,x2,y2, buffer){
// get distance from the point to the two ends of the line
var d1 = this.dist(px,py, x1,y1);
var d2 = this.dist(px,py, x2,y2);
// get the length of the line
var lineLen = this.dist(x1,y1, x2,y2);
// since floats are so minutely accurate, add a little buffer zone that will give collision
if (buffer === undefined){ buffer = 0.1; } // higher # = less accurate
// if the two distances are equal to the line's length, the point is on the line!
// note we use the buffer here to give a range, rather than one #
if (d1+d2 >= lineLen-buffer && d1+d2 <= lineLen+buffer) {
return true;
}
return false;
}
// p5.vector version of collidePointLine
p5.prototype.collidePointLineVector = function(point,p1,p2, buffer){
return p5.prototype.collidePointLine(point.x,point.y, p1.x,p1.y, p2.x,p2.y, buffer);
}
p5.prototype.collideLineCircle = function( x1, y1, x2, y2, cx, cy, diameter) {
// is either end INSIDE the circle?
// if so, return true immediately
var inside1 = this.collidePointCircle(x1,y1, cx,cy,diameter);
var inside2 = this.collidePointCircle(x2,y2, cx,cy,diameter);
if (inside1 || inside2) return true;
// get length of the line
var distX = x1 - x2;
var distY = y1 - y2;
var len = this.sqrt( (distX*distX) + (distY*distY) );
// get dot product of the line and circle
var dot = ( ((cx-x1)*(x2-x1)) + ((cy-y1)*(y2-y1)) ) / this.pow(len,2);
// find the closest point on the line
var closestX = x1 + (dot * (x2-x1));
var closestY = y1 + (dot * (y2-y1));
// is this point actually on the line segment?
// if so keep going, but if not, return false
var onSegment = this.collidePointLine(closestX,closestY,x1,y1,x2,y2);
if (!onSegment) return false;
// draw a debug circle at the closest point on the line
if(this._collideDebug){
this.ellipse(closestX, closestY,10,10);
}
// get distance to closest point
distX = closestX - cx;
distY = closestY - cy;
var distance = this.sqrt( (distX*distX) + (distY*distY) );
if (distance <= diameter/2) {
return true;
}
return false;
}
// p5.vector version of collideLineCircle
p5.prototype.collideLineCircleVector = function( p1, p2, c, diameter){
return p5.prototype.collideLineCircle( p1.x, p1.y, p2.x, p2.y, c.x, c.y, diameter);
}
p5.prototype.collideLineLine = function(x1, y1, x2, y2, x3, y3, x4, y4,calcIntersection) {
var intersection;
// calculate the distance to intersection point
var uA = ((x4-x3)*(y1-y3) - (y4-y3)*(x1-x3)) / ((y4-y3)*(x2-x1) - (x4-x3)*(y2-y1));
var uB = ((x2-x1)*(y1-y3) - (y2-y1)*(x1-x3)) / ((y4-y3)*(x2-x1) - (x4-x3)*(y2-y1));
// if uA and uB are between 0-1, lines are colliding
if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) {
if(this._collideDebug || calcIntersection){
// calc the point where the lines meet
var intersectionX = x1 + (uA * (x2-x1));
var intersectionY = y1 + (uA * (y2-y1));
}
if(this._collideDebug){
this.ellipse(intersectionX,intersectionY,10,10);
}
if(calcIntersection){
intersection = {
"x":intersectionX,
"y":intersectionY
}
return intersection;
}else{
return true;
}
}
if(calcIntersection){
intersection = {
"x":false,
"y":false
}
return intersection;
}
return false;
}
// p5.vector version of collideLineLine
p5.prototype.collideLineLineVector = function(p1, p2, p3, p4, calcIntersection){
return p5.prototype.collideLineLine(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, calcIntersection);
}
p5.prototype.collideLineRect = function(x1, y1, x2, y2, rx, ry, rw, rh, calcIntersection) {
// check if the line has hit any of the rectangle's sides. uses the collideLineLine function above
var left, right, top, bottom, intersection;
if(calcIntersection){
left = this.collideLineLine(x1,y1,x2,y2, rx,ry,rx, ry+rh,true);
right = this.collideLineLine(x1,y1,x2,y2, rx+rw,ry, rx+rw,ry+rh,true);
top = this.collideLineLine(x1,y1,x2,y2, rx,ry, rx+rw,ry,true);
bottom = this.collideLineLine(x1,y1,x2,y2, rx,ry+rh, rx+rw,ry+rh,true);
intersection = {
"left" : left,
"right" : right,
"top" : top,
"bottom" : bottom
}
}else{
//return booleans
left = this.collideLineLine(x1,y1,x2,y2, rx,ry,rx, ry+rh);
right = this.collideLineLine(x1,y1,x2,y2, rx+rw,ry, rx+rw,ry+rh);
top = this.collideLineLine(x1,y1,x2,y2, rx,ry, rx+rw,ry);
bottom = this.collideLineLine(x1,y1,x2,y2, rx,ry+rh, rx+rw,ry+rh);
}
// if ANY of the above are true, the line has hit the rectangle
if (left || right || top || bottom) {
if(calcIntersection){
return intersection;
}
return true;
}
return false;
}
// p5.vector version of collideLineRect
p5.prototype.collideLineRectVector = function(p1, p2, r, rsz, calcIntersection){
return p5.prototype.collideLineRect(p1.x, p1.y, p2.x, p2.y, r.x, r.y, rsz.x, rsz.y, calcIntersection);
}
p5.prototype.collidePointPoly = function(px, py, vertices) {
var collision = false;
// go through each of the vertices, plus the next vertex in the list
var next = 0;
for (var current=0; current<vertices.length; current++) {
// get next vertex in list if we've hit the end, wrap around to 0
next = current+1;
if (next === vertices.length) next = 0;
// get the PVectors at our current position this makes our if statement a little cleaner
var vc = vertices[current]; // c for "current"
var vn = vertices[next]; // n for "next"
// compare position, flip 'collision' variable back and forth
if (((vc.y >= py && vn.y < py) || (vc.y < py && vn.y >= py)) &&
(px < (vn.x-vc.x)*(py-vc.y) / (vn.y-vc.y)+vc.x)) {
collision = !collision;
}
}
return collision;
}
// p5.vector version of collidePointPoly
p5.prototype.collidePointPolyVector = function(p1, vertices){
return p5.prototype.collidePointPoly(p1.x, p1.y, vertices);
}
// POLYGON/CIRCLE
p5.prototype.collideCirclePoly = function(cx, cy, diameter, vertices, interior) {
if (interior === undefined){
interior = false;
}
// go through each of the vertices, plus the next vertex in the list
var next = 0;
for (var current=0; current<vertices.length; current++) {
// get next vertex in list if we've hit the end, wrap around to 0
next = current+1;
if (next === vertices.length) next = 0;
// get the PVectors at our current position this makes our if statement a little cleaner
var vc = vertices[current]; // c for "current"
var vn = vertices[next]; // n for "next"
// check for collision between the circle and a line formed between the two vertices
var collision = this.collideLineCircle(vc.x,vc.y, vn.x,vn.y, cx,cy,diameter);
if (collision) return true;
}
// test if the center of the circle is inside the polygon
if(interior === true){
var centerInside = this.collidePointPoly(cx,cy, vertices);
if (centerInside) return true;
}
// otherwise, after all that, return false
return false;
}
// p5.vector version of collideCirclePoly
p5.prototype.collideCirclePolyVector = function(c, diameter, vertices, interior){
return p5.prototype.collideCirclePoly(c.x, c.y, diameter, vertices, interior);
}
p5.prototype.collideRectPoly = function( rx, ry, rw, rh, vertices, interior) {
if (interior == undefined){
interior = false;
}
// go through each of the vertices, plus the next vertex in the list
var next = 0;
for (var current=0; current<vertices.length; current++) {
// get next vertex in list if we've hit the end, wrap around to 0
next = current+1;
if (next === vertices.length) next = 0;
// get the PVectors at our current position this makes our if statement a little cleaner
var vc = vertices[current]; // c for "current"
var vn = vertices[next]; // n for "next"
// check against all four sides of the rectangle
var collision = this.collideLineRect(vc.x,vc.y,vn.x,vn.y, rx,ry,rw,rh);
if (collision) return true;
// optional: test if the rectangle is INSIDE the polygon note that this iterates all sides of the polygon again, so only use this if you need to
if(interior === true){
var inside = this.collidePointPoly(rx,ry, vertices);
if (inside) return true;
}
}
return false;
}
// p5.vector version of collideRectPoly
p5.prototype.collideRectPolyVector = function(r, rsz, vertices, interior){
return p5.prototype.collideRectPoly(r.x, r.y, rsz.x, rsz.y, vertices, interior);
}
p5.prototype.collideLinePoly = function(x1, y1, x2, y2, vertices) {
// go through each of the vertices, plus the next vertex in the list
var next = 0;
for (var current=0; current<vertices.length; current++) {
// get next vertex in list if we've hit the end, wrap around to 0
next = current+1;
if (next === vertices.length) next = 0;
// get the PVectors at our current position extract X/Y coordinates from each
var x3 = vertices[current].x;
var y3 = vertices[current].y;
var x4 = vertices[next].x;
var y4 = vertices[next].y;
// do a Line/Line comparison if true, return 'true' immediately and stop testing (faster)
var hit = this.collideLineLine(x1, y1, x2, y2, x3, y3, x4, y4);
if (hit) {
return true;
}
}
// never got a hit
return false;
}
// p5.vector version of collideLinePoly
p5.prototype.collideLinePolyVector = function(p1, p2, vertice){
return p5.prototype.collideLinePoly(p1.x, p1.y, p2.x, p2.y, vertice);
}
p5.prototype.collidePolyPoly = function(p1, p2, interior) {
if (interior === undefined){
interior = false;
}
// go through each of the vertices, plus the next vertex in the list
var next = 0;
for (var current=0; current<p1.length; current++) {
// get next vertex in list, if we've hit the end, wrap around to 0
next = current+1;
if (next === p1.length) next = 0;
// get the PVectors at our current position this makes our if statement a little cleaner
var vc = p1[current]; // c for "current"
var vn = p1[next]; // n for "next"
//use these two points (a line) to compare to the other polygon's vertices using polyLine()
var collision = this.collideLinePoly(vc.x,vc.y,vn.x,vn.y,p2);
if (collision) return true;
//check if the either polygon is INSIDE the other
if(interior === true){
collision = this.collidePointPoly(p2[0].x, p2[0].y, p1);
if (collision) return true;
collision = this.collidePointPoly(p1[0].x, p1[0].y, p2);
if (collision) return true;
}
}
return false;
}
p5.prototype.collidePolyPolyVector = function(p1, p2, interior) {
return p5.prototype.collidePolyPoly(p1, p2, interior);
}
p5.prototype.collidePointTriangle = function(px, py, x1, y1, x2, y2, x3, y3) {
// get the area of the triangle
var areaOrig = this.abs( (x2-x1)*(y3-y1) - (x3-x1)*(y2-y1) );
// get the area of 3 triangles made between the point and the corners of the triangle
var area1 = this.abs( (x1-px)*(y2-py) - (x2-px)*(y1-py) );
var area2 = this.abs( (x2-px)*(y3-py) - (x3-px)*(y2-py) );
var area3 = this.abs( (x3-px)*(y1-py) - (x1-px)*(y3-py) );
// if the sum of the three areas equals the original, we're inside the triangle!
if (area1 + area2 + area3 === areaOrig) {
return true;
}
return false;
}
// p5.vector version of collidePointTriangle
p5.prototype.collidePointTriangleVector = function(p, p1, p2, p3){
return p5.prototype.collidePointTriangle(p.x, p.y, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
}
p5.prototype.collidePointPoint = function (x,y,x2,y2, buffer) {
if(buffer === undefined){
buffer = 0;
}
if(this.dist(x,y,x2,y2) <= buffer){
return true;
}
return false;
};
// p5.vector version of collidePointPoint
p5.prototype.collidePointPointVector = function(p1, p2, buffer){
return p5.prototype.collidePointPoint(p1.x,p1.y,p2.x,p2.y, buffer);
}
p5.prototype.collidePointArc = function(px, py, ax, ay, arcRadius, arcHeading, arcAngle, buffer) {
if (buffer === undefined) {
buffer = 0;
}
// point
var point = this.createVector(px, py);
// arc center point
var arcPos = this.createVector(ax, ay);
// arc radius vector
var radius = this.createVector(arcRadius, 0).rotate(arcHeading);
var pointToArc = point.copy().sub(arcPos);
if (point.dist(arcPos) <= (arcRadius + buffer)) {
var dot = radius.dot(pointToArc);
var angle = radius.angleBetween(pointToArc);
if (dot > 0 && angle <= arcAngle / 2 && angle >= -arcAngle / 2) {
return true;
}
}
return false;
}
// p5.vector version of collidePointArc
p5.prototype.collidePointArcVector = function(p1, a, arcRadius, arcHeading, arcAngle, buffer){
return p5.prototype.collidePointArc(p1.x, p1.y, a.x, a.y, arcRadius, arcHeading, arcAngle, buffer);
}
Loading…
Cancel
Save