terrain-generator

digital terrain generation and animation
git clone https://tongong.net/git/terrain-generator.git
Log | Files | Refs | README

commit 3743ee9e9b20db3d0f467466cec8ff08c39c08d7
parent ca485c8aa95aef570e56c020610fe317814720e9
Author: tongong <tongong@gmx.net>
Date:   Sat, 17 Aug 2019 16:22:10 +0200

refresh is now possible

Diffstat:
Mindex.html | 4++--
Mscripts/interface.js | 12++++++++++--
Mscripts/main.js | 29++++++++++++++++++++++++-----
Mscripts/render.js | 18+++++++++---------
Mscripts/rotation.js | 3---
5 files changed, 45 insertions(+), 21 deletions(-)

diff --git a/index.html b/index.html @@ -16,11 +16,11 @@ <body bgcolor="#000000" style="margin: 0; height: 100%; overflow: hidden"> <div id="overlay"> - <svg width="40" height="40" viewBox="0 0 24 24" class="icon"> + <svg width="40" height="40" viewBox="0 0 24 24" class="icon" id="reload"> <rect width="24" height="24" fill="#000000"/> <path fill="#FFFFFF" d="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z" /> </svg> - <svg width="40" height="40" viewBox="0 0 24 24" class="icon"> + <svg width="40" height="40" viewBox="0 0 24 24" class="icon" id="settings"> <rect width="24" height="24" fill="#000000"/> <path fill="#FFFFFF" d="M12,8A4,4 0 0,1 16,12A4,4 0 0,1 12,16A4,4 0 0,1 8,12A4,4 0 0,1 12,8M12,10A2,2 0 0,0 10,12A2,2 0 0,0 12,14A2,2 0 0,0 14,12A2,2 0 0,0 12,10M10,22C9.75,22 9.54,21.82 9.5,21.58L9.13,18.93C8.5,18.68 7.96,18.34 7.44,17.94L4.95,18.95C4.73,19.03 4.46,18.95 4.34,18.73L2.34,15.27C2.21,15.05 2.27,14.78 2.46,14.63L4.57,12.97L4.5,12L4.57,11L2.46,9.37C2.27,9.22 2.21,8.95 2.34,8.73L4.34,5.27C4.46,5.05 4.73,4.96 4.95,5.05L7.44,6.05C7.96,5.66 8.5,5.32 9.13,5.07L9.5,2.42C9.54,2.18 9.75,2 10,2H14C14.25,2 14.46,2.18 14.5,2.42L14.87,5.07C15.5,5.32 16.04,5.66 16.56,6.05L19.05,5.05C19.27,4.96 19.54,5.05 19.66,5.27L21.66,8.73C21.79,8.95 21.73,9.22 21.54,9.37L19.43,11L19.5,12L19.43,13L21.54,14.63C21.73,14.78 21.79,15.05 21.66,15.27L19.66,18.73C19.54,18.95 19.27,19.04 19.05,18.95L16.56,17.95C16.04,18.34 15.5,18.68 14.87,18.93L14.5,21.58C14.46,21.82 14.25,22 14,22H10M11.25,4L10.88,6.61C9.68,6.86 8.62,7.5 7.85,8.39L5.44,7.35L4.69,8.65L6.8,10.2C6.4,11.37 6.4,12.64 6.8,13.8L4.68,15.36L5.43,16.66L7.86,15.62C8.63,16.5 9.68,17.14 10.87,17.38L11.24,20H12.76L13.13,17.39C14.32,17.14 15.37,16.5 16.14,15.62L18.57,16.66L19.32,15.36L17.2,13.81C17.6,12.64 17.6,11.37 17.2,10.2L19.31,8.65L18.56,7.35L16.15,8.39C15.38,7.5 14.32,6.86 13.12,6.62L12.75,4H11.25Z" /> </svg> diff --git a/scripts/interface.js b/scripts/interface.js @@ -1,11 +1,19 @@ +var refreshTime; + function initIconAnimation() { var icons = document.getElementsByClassName("icon"); for (var i = 0; i < icons.length; i++) { - icons[i].addEventListener('mouseenter', function() { + icons[i].addEventListener("mouseenter", function() { this.classList.add("animated"); }, false); - icons[i].addEventListener('animationend', function() { + icons[i].addEventListener("animationend", function() { this.classList.remove("animated"); }, false); } + document.getElementById("reload").addEventListener("click", function() { + if (state == 3) { + refreshTime = millis(); + state = 4; + } + }, false); } \ No newline at end of file diff --git a/scripts/main.js b/scripts/main.js @@ -10,29 +10,36 @@ var RANDOM_FACTOR = 0.5; var MAX_STATE = 4; var ANGLE_FACTOR = 1.5; -var state = 0; +var state; var statePercentage = 0; -var stateNumber = 0; +var stateNumber; var currentField; var endField; +var addHeight; + var startMillis; const time = () => (typeof(startMillis) == "undefined") ? 0 : millis() - startMillis; function setup() { - initIconAnimation(); - initVars(); - var canvas = createCanvas(WIDTH, HEIGHT); canvas.mousePressed(mousePress); canvas.mouseReleased(mouseRelease); + canvas.touchStarted(mousePress); + canvas.touchEnded(mouseRelease); + + initIconAnimation(); + initVars(); + stroke(255); strokeJoin(ROUND); fill(0); } function initVars() { + HEIGHT = window.innerHeight; + WIDTH = window.innerWidth; SIZE = min([HEIGHT / 3, WIDTH / 2 - 70, 500]); ANGLE = SIZE * ANGLE_FACTOR; @@ -43,6 +50,9 @@ function initVars() { endField = new Terrain(2, true); currentField = new Terrain(2, false); + state = 0; + addHeight = 0; + stateNumber = 0; startMillis = millis(); } @@ -88,5 +98,14 @@ function draw() { endField = currentField.addRandom(pow(RANDOM_FACTOR, stateNumber + 1)); } break; + case 4: + statePercentage = (millis() - refreshTime) / 10; + addHeight = statePercentage / 100 * HEIGHT; + currentField.render(SIZE / pow(2, stateNumber + 1), SIZE, getRotation()); + if (statePercentage >= 100) { + statePercentage = 0; + initVars(); + } + break; } } \ No newline at end of file diff --git a/scripts/render.js b/scripts/render.js @@ -57,9 +57,9 @@ function drawPolygon(points, rotation) { }); beginShape(); points.forEach(function(item) { - vertex(CENTER.x + item.x, CENTER.y - item.y - ANGLE + SIZE / 2); + vertex(CENTER.x + item.x, CENTER.y - item.y - ANGLE + SIZE / 2 + addHeight); }); - vertex(CENTER.x + points[0].x, CENTER.y - points[0].y - ANGLE + SIZE / 2); + vertex(CENTER.x + points[0].x, CENTER.y - points[0].y - ANGLE + SIZE / 2 + addHeight); endShape(); } @@ -87,30 +87,30 @@ function drawWall(side, points, rotation) { vertex(CENTER.x + points[0].x, 0); break; case 2: - vertex(WIDTH, CENTER.y - points[0].y - ANGLE + SIZE / 2); + vertex(WIDTH, CENTER.y - points[0].y - ANGLE + SIZE / 2 + addHeight); break; case 3: - vertex(CENTER.x + points[0].x, HEIGHT); + vertex(CENTER.x + points[0].x, HEIGHT + addHeight); break; case 4: - vertex(0, CENTER.y - points[0].y - ANGLE + SIZE / 2); + vertex(0, CENTER.y - points[0].y - ANGLE + SIZE / 2 + addHeight); break; } points.forEach(function(item) { - vertex(CENTER.x + item.x, CENTER.y - item.y - ANGLE + SIZE / 2); + vertex(CENTER.x + item.x, CENTER.y - item.y - ANGLE + SIZE / 2 + addHeight); }); switch (side) { case 1: vertex(CENTER.x + points[points.length - 1].x, 0); break; case 2: - vertex(WIDTH, CENTER.y - points[points.length - 1].y - ANGLE + SIZE / 2); + vertex(WIDTH, CENTER.y - points[points.length - 1].y - ANGLE + SIZE / 2 + addHeight); break; case 3: - vertex(CENTER.x + points[points.length - 1].x, HEIGHT); + vertex(CENTER.x + points[points.length - 1].x, HEIGHT + addHeight); break; case 4: - vertex(0, CENTER.y - points[points.length - 1].y - ANGLE + SIZE / 2); + vertex(0, CENTER.y - points[points.length - 1].y - ANGLE + SIZE / 2 + addHeight); break; } endShape(); diff --git a/scripts/rotation.js b/scripts/rotation.js @@ -37,11 +37,8 @@ function getRotation() { function mousePress() { mousePressed = true; - console.log("bum"); } function mouseRelease() { mousePressed = false; - console.log("ba"); - } \ No newline at end of file