xxxxxxxxxx
208
let actNum=0;
let clasters = [];
let targetX = [];
let targetY = [];
let mouseXs = [];
let mouseYs = [];
let coin;
let bgX = 200;
let bgY = 200;
let degree = 10;
let bg;
let speed = 2;
let number = 8;
let mode = 1;
let timeSpeed=1;
let Pdown=0;
let Pup=0;
let Pright=0;
let Pleft=0;
let Pcircle=0;
let Pcountercircle=0;
let actionTime=0;
let serial;
function preload() {
bg = loadImage('bg5.png');
hair = loadImage('reference.png');
}
function setup() {
serial = new p5.SerialPort(); // make a new instance of serialport librar
serial.on('list', printList); // callback function for serialport list event
serial.on('data', serialEvent); // callback for new data coming in
serial.list(); // list the serial ports
serial.open("COM15"); // open a port
hair.loadPixels();
createCanvas(windowWidth, windowHeight);
for (let i = 0; i < number; i++) {
let newClaster = new Clasters(random(0, 400), random(0, 300), 40, i + 1, 1.1, speed);
clasters.push(newClaster);
}
for (let i = 0; i < number; i++) {
targetX.push(width / 2);
targetY.push(height / 2);
}
for (let i = 0; i < 20; i++) {
mouseXs.push(width / 2);
mouseYs.push(height / 2);
}
// let targetX=xPos+(lineIndex-lineDivision/2)*2;
// let targetY=yPos+(lineDivision)*4;
// for (let i=0;i<lineDivision;i++){
// let newPosX=i/lineDivision*targetX+(lineDivision-i)/lineDivision*xPos;
// let newPosY=i/lineDivision*targetY+(lineDivision-i)/lineDivision*yPos;
// let lineNew=new Lines(newPosX,newPosY,i);
// lines.push(lineNew);
// }
}
function draw() {
let t=millis()/1000*timeSpeed;
if (Pcircle>0.8||Pcountercircle>0.8){
mode=6;
}
if (Pdown>0.8||Pup>0.8){
mode=3;
}
if (Pright>0.8||Pleft>0.8){
mode=2;
}
if (frameCount-actionTime>60){
mode=1;
}
//mode=floor(millis()/1000/4%5)+1;
// background(255,40);
//draw the background picture
imageMode(CENTER);
if (abs(abs(pmouseX + pmouseY) - abs(mouseX + mouseY)) >= 4) {
degree--;
if (degree <= 1) {
degree = 1;
}
} else {
degree++;
if (degree >= 10) {
degree = 10;
}
}
tint(195 + 10 * degree, 195 + 10 * degree, 85 + 15 * degree, 126);
image(bg, bgX, bgY, 2 * windowWidth, 2 * windowHeight);
//draw the troop
for (let i = 0; i < number; i++) {
clasters[i].show();
}
if (mode == 1) {
mouseXs.splice(0, 1);
mouseYs.splice(0, 1);
mouseXs.push(width / 2 + 40 * sin(t/5 + cos(5*2.5)));
mouseYs.push(height / 2 + 40 * cos(t/5));
for (let i = 1; i < number; i++) {
noStroke();
fill(255);
targetX[i] = mouseXs[i%number * 4 - 4];
targetY[i] = mouseYs[i%number * 4 - 4];
}
}
if (mode == 2) {
for (let i = 1; i < number; i++) {
targetX[i] = (width/2+(timeSpeed-1)*width)%width;
targetY[i] = 0.8*height*(floor(0.9*sin((i+6)/(number-1)*2*PI))+1)+sin(t/5 +(i+actNum)+ cos(5*2.5))*40;
}
}
console.log("MODE ",mode)
if (mode == 3) {
for (let i = 1; i < number; i++) {
targetY[i] = (height/2+(timeSpeed-1)*height)%height;
targetX[i] = width *floor(i/number*2)+sin(t/5 +(i+actNum)+ cos(t*2.5))*40;
}
}
if (mode == 4) {
mouseXs.splice(0, 1);
mouseYs.splice(0, 1);
mouseXs.push(width / 2 + 220 * sin(t ));
mouseYs.push(height / 2 + 220 * cos(t));
for (let i = 1; i < number; i++) {
targetX[i] = mouseXs[i * 4 - 4];
targetY[i] = mouseYs[i * 4 - 4];
}
}
if (mode == 5) {
for (let i = 0; i < number; i++) {
targetX[i] = width / 2+sin( ((i+actNum)%number+1)*6.28/8)*200*sin(t);
targetY[i] = height / 2+cos(((i+actNum)%number+1)*6.28/8)*200*sin(t);
}
}
if (mode == 6) {
for (let i = 0; i < number; i++) {
targetX[i] = width / 2+sin( ((i+actNum)%number+1.5*cos(t/5))*6.28/8)*200*(sin(t)-0.5);
targetY[i] = height / 2+cos(((i+actNum)%number+1.5*cos(t/5))*6.28/8)*200*(sin(t)-0.5);
}
}
//console.log("mode ",mode);
}
function serialEvent() {
let stringFromSerial = serial.readLine();
let start=stringFromSerial.indexOf(":");
//console.log(stringFromSerial);
data=stringFromSerial.substring(start+2,stringFromSerial.length-1);
data=float(data);
if (stringFromSerial.includes("start")){
mode=1;
actNum++;
}
if (stringFromSerial.includes("circle")){
Pcircle=data;
actionTime=frameCount;
}
if (stringFromSerial.includes("down")){
Pdown=data;
}
if (stringFromSerial.includes("right")){
Pright=data;
}
if (stringFromSerial.includes("countercircle")){
Pcountercircle=data;
}
if (stringFromSerial.includes("up")){
Pup=data;
}
if (stringFromSerial.includes("left")){
Pleft=data;
}
if (stringFromSerial.includes("speed")){
let speeds=stringFromSerial.substring(8,stringFromSerial.length-1);
timeSpeed=float(speeds);
//console.log(speeds);
}
}
function printList(portList) {
for (var i = 0; i < portList.length; i++) {
// Display the list the console:
print(i + " " + portList[i]);
}
}