main.js (2801B)
1 var HEIGHT = window.innerHeight; 2 var WIDTH = window.innerWidth; 3 var CENTER_HORIZON; 4 var LEFT_HORIZON; 5 var CENTER; 6 var ANGLE; 7 var SIZE; 8 9 var RANDOM_FACTOR = 0.5; // 0 - 1 10 var MAX_STATE = 4; // 1 - 8 11 var ANGLE_FACTOR = 1.5; // 0.5 - 2.5 12 13 var state; 14 var statePercentage = 0; 15 var stateNumber; 16 17 var currentField; 18 var endField; 19 20 var addHeight; 21 22 var startMillis; 23 const time = () => (typeof(startMillis) == "undefined") ? 0 : millis() - startMillis; 24 25 function setup() { 26 var canvas = createCanvas(WIDTH, HEIGHT); 27 canvas.mousePressed(mousePress); 28 canvas.mouseReleased(mouseRelease); 29 canvas.touchStarted(mousePress); 30 canvas.touchEnded(mouseRelease); 31 32 initIconAnimation(); 33 initVars(); 34 35 stroke(255); 36 strokeJoin(ROUND); 37 fill(0); 38 } 39 40 function initVars() { 41 HEIGHT = window.innerHeight; 42 WIDTH = window.innerWidth; 43 SIZE = min([HEIGHT / 3, WIDTH / 2 - 70, 500]); 44 ANGLE = SIZE * ANGLE_FACTOR; 45 46 CENTER = createVector(WIDTH / 2, HEIGHT / 2); 47 CENTER_HORIZON = createVector(0, 0); 48 LEFT_HORIZON = createVector(-2 * SIZE, 0); 49 50 endField = new Terrain(2, true); 51 currentField = new Terrain(2, false); 52 53 state = 0; 54 addHeight = 0; 55 stateNumber = 0; 56 refreshTime = 0; 57 startMillis = millis(); 58 } 59 60 function draw() { 61 background(0); 62 63 if (refreshTime != 0) { 64 addHeight = (millis() - refreshTime) / 1000 * HEIGHT; 65 if ((millis() - refreshTime) >= 1000) { 66 statePercentage = 0; 67 initVars(); 68 resizeCanvas(WIDTH, HEIGHT); 69 } 70 } 71 72 switch (state) { 73 case 0: 74 statePercentage = time() / 20; 75 line(CENTER.x, HEIGHT + addHeight, CENTER.x, CENTER.y * (2 - statePercentage / 100) + addHeight); 76 if (statePercentage >= 100) { 77 state = 1; 78 statePercentage = 0; 79 } 80 break; 81 case 1: 82 statePercentage = time() / 10 - 200; 83 currentField.render(statePercentage / 100 * SIZE, SIZE, getRotation()); 84 if (statePercentage >= 100) { 85 state = 2; 86 statePercentage = 0; 87 } 88 break; 89 case 2: 90 statePercentage = time() / 10 - 100 * (3 + stateNumber); 91 currentField.transform(endField, 0.1); 92 currentField.render(SIZE / pow(2, stateNumber), SIZE, getRotation()); 93 if (statePercentage >= 100 && stateNumber < MAX_STATE - 1) { 94 statePercentage = 0; 95 stateNumber++; 96 currentField = currentField.scaleUp(); 97 endField = currentField.addRandom(pow(RANDOM_FACTOR, stateNumber)); 98 } 99 break; 100 } 101 }