@erikwatson/snowfall 4.0.1 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -19,13 +19,13 @@
19
19
  return /******/ (() => { // webpackBootstrap
20
20
  /******/ var __webpack_modules__ = ({
21
21
 
22
- /***/ "./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js":
23
- /*!*******************************************************************************************************!*\
24
- !*** ./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js ***!
25
- \*******************************************************************************************************/
22
+ /***/ "./node_modules/.pnpm/@erikwatson+bramble@0.10.0/node_modules/@erikwatson/bramble/dist/bramble.js":
23
+ /*!********************************************************************************************************!*\
24
+ !*** ./node_modules/.pnpm/@erikwatson+bramble@0.10.0/node_modules/@erikwatson/bramble/dist/bramble.js ***!
25
+ \********************************************************************************************************/
26
26
  /***/ ((module) => {
27
27
 
28
- eval("(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse {}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_539__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_539__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_539__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_539__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_539__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_539__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_539__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_539__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_539__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_539__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_539__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_539__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_539__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_539__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_539__.p = \"/js/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_539__(__nested_webpack_require_539__.s = \"./src/bramble.ts\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./src/assets.ts\":\n/*!***********************!*\\\n !*** ./src/assets.ts ***!\n \\***********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadAllTerrain = exports.loadTerrain = exports.loadAllImages = exports.loadImage = exports.loadAllText = exports.loadText = void 0;\nfunction loadText(path) {\n return new Promise(function (resolve, reject) {\n var request = new XMLHttpRequest();\n request.addEventListener('load', function (_) {\n resolve(request.responseText);\n });\n request.addEventListener('error', function (event) {\n reject(event);\n });\n request.open('GET', path);\n request.send();\n });\n}\nexports.loadText = loadText;\nfunction loadAllText(paths) {\n if (paths === void 0) { paths = []; }\n return Promise.all(paths.map(function (x) { return loadText(x); }));\n}\nexports.loadAllText = loadAllText;\nfunction loadImage(path) {\n return new Promise(function (resolve, reject) {\n var img = new Image();\n img.addEventListener('load', function (_) {\n resolve(img);\n });\n img.addEventListener('error', function (err) {\n reject(err);\n });\n img.src = path;\n });\n}\nexports.loadImage = loadImage;\nfunction loadAllImages(paths) {\n if (paths === void 0) { paths = []; }\n return Promise.all(paths.map(function (x) { return loadImage(x); }));\n}\nexports.loadAllImages = loadAllImages;\n// Downloads a Terrain file,\n// reads it,\n// downloads the related image file,\n// returns a new Terrain object\nfunction loadTerrain(path) {\n var description;\n return loadText(path)\n .then(function (json) {\n description = JSON.parse(json);\n return loadImage(description.path);\n })\n .then(function (image) { return ({\n name: description.name,\n type: description.type,\n image: image,\n tiles: description.tiles\n }); });\n}\nexports.loadTerrain = loadTerrain;\nfunction loadAllTerrain(paths) {\n if (paths === void 0) { paths = []; }\n return Promise.all(paths.map(function (x) { return loadTerrain(x); }));\n}\nexports.loadAllTerrain = loadAllTerrain;\nexports.default = {\n loadImage: loadImage,\n loadText: loadText,\n loadAllText: loadAllText,\n loadAllImages: loadAllImages,\n loadTerrain: loadTerrain,\n loadAllTerrain: loadAllTerrain\n};\n\n\n/***/ }),\n\n/***/ \"./src/bramble.ts\":\n/*!************************!*\\\n !*** ./src/bramble.ts ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_6669__) {\n\n\"use strict\";\n\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.collisions = exports.load = exports.save = exports.vec2 = exports.sprite = exports.mouse = exports.keyboard = exports.graphics = exports.grid = exports.game = exports.assets = void 0;\nvar assets_1 = __nested_webpack_require_6669__(/*! ./assets */ \"./src/assets.ts\");\nObject.defineProperty(exports, \"assets\", { enumerable: true, get: function () { return assets_1.default; } });\nvar game_1 = __nested_webpack_require_6669__(/*! ./game */ \"./src/game.ts\");\nObject.defineProperty(exports, \"game\", { enumerable: true, get: function () { return game_1.default; } });\nvar grid_1 = __nested_webpack_require_6669__(/*! ./grid */ \"./src/grid.ts\");\nObject.defineProperty(exports, \"grid\", { enumerable: true, get: function () { return grid_1.default; } });\nvar graphics_1 = __nested_webpack_require_6669__(/*! ./graphics */ \"./src/graphics.ts\");\nObject.defineProperty(exports, \"graphics\", { enumerable: true, get: function () { return graphics_1.default; } });\nvar input_1 = __nested_webpack_require_6669__(/*! ./input */ \"./src/input.ts\");\nObject.defineProperty(exports, \"keyboard\", { enumerable: true, get: function () { return input_1.keyboard; } });\nObject.defineProperty(exports, \"mouse\", { enumerable: true, get: function () { return input_1.mouse; } });\nvar sprite_1 = __nested_webpack_require_6669__(/*! ./sprite */ \"./src/sprite.ts\");\nObject.defineProperty(exports, \"sprite\", { enumerable: true, get: function () { return sprite_1.default; } });\nvar vec2_1 = __nested_webpack_require_6669__(/*! ./vec2 */ \"./src/vec2.ts\");\nObject.defineProperty(exports, \"vec2\", { enumerable: true, get: function () { return vec2_1.default; } });\nvar storage_1 = __nested_webpack_require_6669__(/*! ./storage */ \"./src/storage.ts\");\nObject.defineProperty(exports, \"save\", { enumerable: true, get: function () { return storage_1.save; } });\nObject.defineProperty(exports, \"load\", { enumerable: true, get: function () { return storage_1.load; } });\nvar collision_1 = __nested_webpack_require_6669__(/*! ./collision */ \"./src/collision.ts\");\nObject.defineProperty(exports, \"collisions\", { enumerable: true, get: function () { return collision_1.default; } });\n__exportStar(__nested_webpack_require_6669__(/*! ./types */ \"./src/types.ts\"), exports);\n\n\n/***/ }),\n\n/***/ \"./src/collision.ts\":\n/*!**************************!*\\\n !*** ./src/collision.ts ***!\n \\**************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_9766__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bramble_1 = __nested_webpack_require_9766__(/*! ./bramble */ \"./src/bramble.ts\");\n// works\nfunction pointVsRect(point, rect) {\n return (point.x >= rect.x &&\n point.y >= rect.y &&\n point.x < rect.x + rect.width &&\n point.y < rect.y + rect.height);\n}\n// works\nfunction rectVsRect(rectA, rectB) {\n return (rectA.x < rectB.x + rectB.width &&\n rectA.x + rectA.width > rectB.x &&\n rectA.y < rectB.y + rectB.height &&\n rectA.y + rectA.height > rectB.y);\n}\n// works\n// returns false if no collision occurred, otherwise it returns an object\n// containing the results of the collision\n// { near, far, normal }\nfunction lineVsRect(line, rect) {\n var from = bramble_1.vec2.create(line.from.x, line.from.y);\n var to = bramble_1.vec2.create(line.to.x, line.to.y);\n var dir = bramble_1.vec2.clone(to);\n dir.subtract(from);\n var invdir = {\n x: 1.0 / dir.x,\n y: 1.0 / dir.y\n };\n var timeNear = {\n x: (rect.x - line.from.x) * invdir.x,\n y: (rect.y - line.from.y) * invdir.y\n };\n var timeFar = {\n x: (rect.x + rect.width - line.from.x) * invdir.x,\n y: (rect.y + rect.height - line.from.y) * invdir.y\n };\n if (isNaN(timeNear.x) || isNaN(timeNear.y)) {\n return false;\n }\n if (isNaN(timeFar.x) || isNaN(timeFar.y)) {\n return false;\n }\n // sort the distances\n var tempNear = __assign({}, timeNear);\n var tempFar = __assign({}, timeFar);\n if (tempNear.x > tempFar.x) {\n timeNear.x = tempFar.x;\n timeFar.x = tempNear.x;\n }\n tempNear = __assign({}, timeNear);\n tempFar = __assign({}, timeFar);\n if (tempNear.y > tempFar.y) {\n timeNear.y = tempFar.y;\n timeFar.y = tempNear.y;\n }\n // no collision detected\n if (timeNear.x > timeFar.y || timeNear.y > timeFar.x) {\n return false;\n }\n var hitNear = Math.max(timeNear.x, timeNear.y);\n var hitFar = Math.min(timeFar.x, timeFar.y);\n // abort if ray is facing away from our object\n if (hitFar < 0) {\n return false;\n }\n // abort if the ray does not reach the object\n if (hitNear > 1) {\n return false;\n }\n // abort if the ray's first collision is behind us\n if (hitNear < 0) {\n return false;\n }\n // construct a vector to hold the normal of the surface\n var normal = bramble_1.vec2.create(0, 0);\n if (timeNear.x > timeNear.y) {\n if (invdir.x < 0) {\n normal.x = 1;\n normal.y = 0;\n }\n else {\n normal.x = -1;\n normal.y = 0;\n }\n }\n else if (timeNear.x < timeNear.y) {\n if (invdir.y < 0) {\n normal.x = 0;\n normal.y = 1;\n }\n else {\n normal.x = 0;\n normal.y = -1;\n }\n }\n else if (timeNear.x === timeNear.y) {\n if (invdir.x < 0 && invdir.y < 0) {\n normal.x = -1;\n normal.y = 1;\n }\n else if (invdir.x > 0 && invdir.y < 0) {\n normal.x = 1;\n normal.y = 1;\n }\n else if (invdir.x < 0 && invdir.y > 0) {\n normal.x = -1;\n normal.y = -1;\n }\n else if (invdir.x > 0 && invdir.y > 0) {\n normal.x = 1;\n normal.y = -1;\n }\n }\n // collided with the object!\n return {\n normal: normal,\n near: bramble_1.vec2.create(from.x + hitNear * dir.x, from.y + hitNear * dir.y),\n far: bramble_1.vec2.create(from.x + hitFar * dir.x, from.y + hitFar * dir.y),\n timeOfCollision: hitNear\n };\n}\n// a dynamic rect is one that can move - has a velocity\n// static rect doesn't move\nfunction dynamicRectVsStaticRect(dynamicRect, staticRect) {\n // assume no collision if the dynamic rect is not moving\n // avoiding using length here because it calculates a square root\n if (dynamicRect.velocity.x === 0 && dynamicRect.velocity.y === 0) {\n return false;\n }\n var halfWidth = dynamicRect.width / 2;\n var halfHeight = dynamicRect.height / 2;\n var clone = bramble_1.vec2.clone(dynamicRect.position);\n clone.add(dynamicRect.velocity);\n clone.x += dynamicRect.width / 2;\n clone.y += dynamicRect.height / 2;\n var line = {\n from: {\n x: dynamicRect.position.x + halfWidth,\n y: dynamicRect.position.y + halfHeight\n },\n to: clone\n };\n var rect = {\n x: staticRect.position.x - halfWidth,\n y: staticRect.position.y - halfHeight,\n width: staticRect.width + dynamicRect.width,\n height: staticRect.height + dynamicRect.height\n };\n return lineVsRect(line, rect);\n}\n// Compute the value of a point on a cubic Bezier curve at parameter t\nfunction cubicBezierPoint(P0, P1, P2, P3, t) {\n var x = (1 - t) * (1 - t) * (1 - t) * P0.x +\n 3 * (1 - t) * (1 - t) * t * P1.x +\n 3 * (1 - t) * t * t * P2.x +\n t * t * t * P3.x;\n var y = (1 - t) * (1 - t) * (1 - t) * P0.y +\n 3 * (1 - t) * (1 - t) * t * P1.y +\n 3 * (1 - t) * t * t * P2.y +\n t * t * t * P3.y;\n return bramble_1.vec2.create(x, y);\n}\n// Compute the tangent of the curve at parameter t\nfunction cubicBezierTangent(P0, P1, P2, P3, t) {\n var x = 3 * (1 - t) * (1 - t) * (P1.x - P0.x) +\n 6 * (1 - t) * t * (P2.x - P1.x) +\n 3 * t * t * (P3.x - P2.x);\n var y = 3 * (1 - t) * (1 - t) * (P1.y - P0.y) +\n 6 * (1 - t) * t * (P2.y - P1.y) +\n 3 * t * t * (P3.y - P2.y);\n return bramble_1.vec2.create(x, y);\n}\n// Helper function to find the roots of a cubic polynomial using Cardano's formula\nfunction findCubicRoots(A, B, C, D) {\n if (Math.abs(A) < 1e-10) {\n return findQuadraticRoots(B, C, D);\n }\n var a = B / A;\n var b = C / A;\n var c = D / A;\n var p = (3 * b - a * a) / 3;\n var q = (2 * a * a * a - 9 * a * b + 27 * c) / 27;\n var discriminant = (q * q) / 4 + (p * p * p) / 27;\n var roots = [];\n if (discriminant > 0) {\n var u = Math.cbrt(-q / 2 + Math.sqrt(discriminant));\n var v = Math.cbrt(-q / 2 - Math.sqrt(discriminant));\n roots.push(u + v - a / 3);\n }\n else if (discriminant === 0) {\n var u = Math.cbrt(-q / 2);\n roots.push(2 * u - a / 3);\n roots.push(-u - a / 3);\n }\n else {\n var r = Math.sqrt((-p * p * p) / 27);\n var phi = Math.acos(-q / (2 * r));\n roots.push(2 * Math.cbrt(r) * Math.cos(phi / 3) - a / 3);\n roots.push(2 * Math.cbrt(r) * Math.cos((phi + 2 * Math.PI) / 3) - a / 3);\n roots.push(2 * Math.cbrt(r) * Math.cos((phi + 4 * Math.PI) / 3) - a / 3);\n }\n return roots.filter(function (t) { return t >= 0 && t <= 1; });\n}\n// Helper function to find the roots of a quadratic polynomial\nfunction findQuadraticRoots(A, B, C) {\n var discriminant = B * B - 4 * A * C;\n if (discriminant < 0) {\n return [];\n }\n else if (discriminant === 0) {\n return [-B / (2 * A)];\n }\n else {\n var sqrtDiscriminant = Math.sqrt(discriminant);\n return [\n (-B + sqrtDiscriminant) / (2 * A),\n (-B - sqrtDiscriminant) / (2 * A)\n ];\n }\n}\n// Find intersection between a ray (defined by two points) and a cubic Bezier curve\nfunction lineVsCubicBezierCurve(P0, P1, P2, P3, R0, R1) {\n var intersections = [];\n // Coefficients of the cubic Bezier curve\n var ax = -P0.x + 3 * P1.x - 3 * P2.x + P3.x;\n var ay = -P0.y + 3 * P1.y - 3 * P2.y + P3.y;\n var bx = 3 * P0.x - 6 * P1.x + 3 * P2.x;\n var by = 3 * P0.y - 6 * P1.y + 3 * P2.y;\n var cx = -3 * P0.x + 3 * P1.x;\n var cy = -3 * P0.y + 3 * P1.y;\n var dx = P0.x;\n var dy = P0.y;\n // Coefficients of the ray\n var rx = R1.x - R0.x;\n var ry = R1.y - R0.y;\n var ex = R0.x;\n var ey = R0.y;\n // Construct the cubic equation: At^3 + Bt^2 + Ct + D = 0\n var A = ax * ry - ay * rx;\n var B = bx * ry - by * rx;\n var C = cx * ry - cy * rx;\n var D = (dx - ex) * ry - (dy - ey) * rx;\n var roots = findCubicRoots(A, B, C, D);\n // Check valid t values and compute intersections\n roots.forEach(function (t) {\n var intersection = cubicBezierPoint(P0, P1, P2, P3, t);\n var tangent = cubicBezierTangent(P0, P1, P2, P3, t);\n var angleRadians = Math.atan2(tangent.y, tangent.x);\n var angleDegrees = angleRadians * (180 / Math.PI);\n var tempvec = bramble_1.vec2.fromDegrees(angleDegrees);\n var normal = bramble_1.vec2.create(tempvec.y, -tempvec.x);\n // Calculate the distance along the ray\n var dx = intersection.x - R0.x;\n var dy = intersection.y - R0.y;\n var distanceToIntersection = Math.sqrt(dx * dx + dy * dy);\n var rayLength = Math.sqrt(rx * rx + ry * ry);\n var remainderLength = rayLength - distanceToIntersection;\n // Ensure the intersection point lies within the ray segment\n var rayParam = (intersection.x - ex) / rx;\n var rayParamY = (intersection.y - ey) / ry;\n if ((rayParam >= 0 && rayParam <= 1) ||\n (rayParamY >= 0 && rayParamY <= 1)) {\n intersections.push({\n point: bramble_1.vec2.create(intersection.x, intersection.y),\n distance: distanceToIntersection,\n remainderLength: remainderLength,\n angleRadians: angleRadians,\n angleDegrees: angleDegrees,\n direction: bramble_1.vec2.fromDegrees(angleDegrees),\n normal: normal\n });\n }\n });\n return intersections;\n}\nexports.default = {\n dynamicRectVsStaticRect: dynamicRectVsStaticRect,\n rectVsRect: rectVsRect,\n lineVsRect: lineVsRect,\n pointVsRect: pointVsRect,\n lineVsCubicBezierCurve: lineVsCubicBezierCurve\n};\n\n\n/***/ }),\n\n/***/ \"./src/game.ts\":\n/*!*********************!*\\\n !*** ./src/game.ts ***!\n \\*********************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_20176__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar graphics_1 = __nested_webpack_require_20176__(/*! ./graphics */ \"./src/graphics.ts\");\nvar input_1 = __nested_webpack_require_20176__(/*! ./input */ \"./src/input.ts\");\nvar create = function () {\n var backgroundColor = null;\n var update = null;\n var render = null;\n // used for calculating the Delta Time for the Frame\n var prevTime = 0;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n var graphics = graphics_1.default.create(ctx);\n canvas.id = 'bramble-game';\n var mouseInput = input_1.mouse.create(canvas);\n var keyboardInput = input_1.keyboard.create(canvas);\n var setBackgroundColor = function (color) {\n backgroundColor = color;\n };\n var attachTo = function (element) {\n element.appendChild(canvas);\n };\n var setUpdate = function (callback) {\n update = callback;\n };\n var setRender = function (callback) {\n render = callback;\n };\n var inputState = {\n keyboard: keyboardInput.getState(),\n mouse: mouseInput.getState(),\n };\n var step = function () {\n if (update) {\n inputState.keyboard = keyboardInput.getState();\n inputState.mouse = mouseInput.getState();\n update((performance.now() - prevTime) / 1000, inputState);\n }\n if (render) {\n if (backgroundColor) {\n graphics.clear(backgroundColor);\n }\n render(graphics);\n }\n mouseInput.update();\n keyboardInput.update();\n window.requestAnimationFrame(step);\n prevTime = performance.now();\n };\n var start = function () {\n mouseInput.start();\n keyboardInput.start();\n window.requestAnimationFrame(step);\n };\n var setSize = function (width, height) {\n canvas.width = width;\n canvas.height = height;\n };\n // Smoothing must be re-applied if any of the following is called\n // - setSize\n var setSmoothing = function (to) {\n if (to === void 0) { to = true; }\n ctx.imageSmoothingEnabled = to;\n };\n var disableContextMenu = function () {\n canvas.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n };\n return {\n attachTo: attachTo,\n setSize: setSize,\n setUpdate: setUpdate,\n setRender: setRender,\n setBackgroundColor: setBackgroundColor,\n canvas: canvas,\n disableContextMenu: disableContextMenu,\n setSmoothing: setSmoothing,\n start: start\n };\n};\nexports.default = {\n create: create\n};\n\n\n/***/ }),\n\n/***/ \"./src/graphics.ts\":\n/*!*************************!*\\\n !*** ./src/graphics.ts ***!\n \\*************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_23059__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar number_1 = __nested_webpack_require_23059__(/*! ./utils/number */ \"./src/utils/number.ts\");\nvar object_1 = __nested_webpack_require_23059__(/*! ./utils/object */ \"./src/utils/object.ts\");\nfunction freshContext(ctx, callback) {\n ctx.save();\n callback();\n ctx.restore();\n}\nfunction clear(ctx, colour) {\n if (!colour) {\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n else {\n rect(ctx, { x: 0, y: 0, width: ctx.canvas.width, height: ctx.canvas.height }, {\n fill: { colour: colour },\n line: { width: 0 }\n });\n }\n}\nfunction clearRect(ctx, rectangle, colour) {\n if (!colour) {\n ctx.clearRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n }\n else {\n rect(ctx, rectangle, {\n fill: { colour: colour },\n line: { width: 0 }\n });\n }\n}\nfunction square(ctx, position, size, options) {\n if (options === void 0) { options = defaultRect; }\n rect(ctx, { x: position.x, y: position.y, width: size, height: size }, options);\n}\nvar defaultRect = {\n fill: {\n colour: '#000000',\n opacity: 1\n },\n line: {\n width: 1,\n colour: '#FFFFFF',\n opacity: 1\n }\n};\nfunction rect(ctx, rectangle, options) {\n if (options === void 0) { options = defaultRect; }\n freshContext(ctx, function () {\n options = (0, object_1.merge)(defaultRect, options);\n ctx.globalAlpha = options.fill.opacity;\n ctx.fillStyle = options.fill.colour;\n ctx.fillRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n ctx.globalAlpha = 1;\n if (options.line.width !== 0) {\n ctx.globalAlpha = options.line.opacity;\n ctx.strokeStyle = options.line.colour;\n ctx.lineWidth = options.line.width;\n ctx.strokeRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n ctx.globalAlpha = 1;\n }\n });\n}\nvar defaultLine = {\n width: 1,\n colour: '#FFFFFF',\n opacity: 1\n};\nfunction line(ctx, from, to, options) {\n if (options === void 0) { options = defaultLine; }\n freshContext(ctx, function () {\n options = (0, object_1.merge)(defaultLine, options);\n ctx.globalAlpha = options.opacity;\n ctx.strokeStyle = options.colour;\n ctx.lineWidth = options.width;\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n ctx.stroke();\n ctx.globalAlpha = 1;\n ctx.closePath();\n });\n}\nfunction bezier(ctx, from, to, cp1, cp2, options) {\n if (options === void 0) { options = defaultLine; }\n freshContext(ctx, function () {\n options = (0, object_1.merge)(defaultLine, options);\n ctx.globalAlpha = options.opacity;\n ctx.strokeStyle = options.colour;\n ctx.lineWidth = options.width;\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.bezierCurveTo(cp1.x, cp1.y, cp2.x, cp2.y, to.x, to.y);\n ctx.stroke();\n ctx.globalAlpha = 1;\n ctx.closePath();\n });\n}\nfunction quadratic(ctx, from, to, cp, options) {\n if (options === void 0) { options = defaultLine; }\n freshContext(ctx, function () {\n options = (0, object_1.merge)(defaultLine, options);\n ctx.globalAlpha = options.opacity;\n ctx.strokeStyle = options.colour;\n ctx.lineWidth = options.width;\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.quadraticCurveTo(cp.x, cp.y, to.x, to.y);\n ctx.stroke();\n ctx.globalAlpha = 1;\n ctx.closePath();\n });\n}\nfunction curve(ctx, from, to, controlPoints, options) {\n if (options === void 0) { options = defaultLine; }\n if (controlPoints.cp1 && controlPoints.cp2) {\n bezier(ctx, from, to, controlPoints.cp1, controlPoints.cp2, options);\n }\n else if (controlPoints.cp1 && !controlPoints.cp2) {\n quadratic(ctx, from, to, controlPoints.cp1, options);\n }\n else {\n line(ctx, from, to, options);\n }\n}\nvar defaultCircle = {\n fill: {\n colour: '#000000',\n opacity: 1\n },\n line: {\n colour: '#FFFFFF',\n opacity: 1,\n width: 1\n }\n};\nfunction circle(ctx, position, radius, options) {\n if (options === void 0) { options = defaultCircle; }\n freshContext(ctx, function () {\n options = (0, object_1.merge)(defaultCircle, options);\n ctx.globalAlpha = options.fill.opacity;\n ctx.fillStyle = options.fill.colour;\n ctx.beginPath();\n ctx.arc(position.x, position.y, radius, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n ctx.globalAlpha = 1;\n if (options.line.width !== 0) {\n ctx.globalAlpha = options.line.opacity;\n ctx.strokeStyle = options.line.colour;\n ctx.lineWidth = options.line.width;\n ctx.beginPath();\n ctx.arc(position.x, position.y, radius, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.stroke();\n }\n });\n}\nfunction image(ctx, image, position, size) {\n if (size) {\n ctx.drawImage(image, position.x, position.y, size.width, size.height);\n }\n else {\n ctx.drawImage(image, position.x, position.y, image.width, image.height);\n }\n}\nfunction subImage(ctx, image, position, size, subPosition, subSize) {\n ctx.drawImage(image, subPosition.x, subPosition.y, subSize.width, subSize.height, position.x, position.y, size.width, size.height);\n}\nfunction sprite(ctx, sprite) {\n freshContext(ctx, function () {\n var halfWidth = sprite.size.width / 2;\n var halfHeight = sprite.size.height / 2;\n ctx.translate(sprite.position.x + halfWidth, sprite.position.y + halfHeight);\n ctx.rotate(number_1.default.toRadians(sprite.rotation));\n if (sprite.frames.length > 1) {\n subImage(ctx, sprite.texture, {\n x: -halfWidth,\n y: -halfHeight\n }, {\n width: sprite.size.width,\n height: sprite.size.height\n }, {\n x: sprite.frames[sprite.frame].position.x,\n y: sprite.frames[sprite.frame].position.y\n }, {\n width: sprite.frames[sprite.frame].size.width,\n height: sprite.frames[sprite.frame].size.height\n });\n }\n else {\n image(ctx, sprite.texture, {\n x: -halfWidth,\n y: -halfHeight\n }, {\n width: sprite.size.width,\n height: sprite.size.height\n });\n }\n });\n}\nfunction txt(ctx, position, text, colour, font) {\n if (text === void 0) { text = ''; }\n if (colour === void 0) { colour = '#000000'; }\n if (font === void 0) { font = '16pt sans-serif'; }\n freshContext(ctx, function () {\n ctx.fillStyle = colour;\n ctx.font = font;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'top';\n ctx.fillText(text, position.x, position.y);\n });\n}\nfunction tile(ctx, position, tilesheet, gridPosition, tilesheetPosition, scale, tileSize) {\n subImage(ctx, tilesheet, {\n x: position.x + scale * (gridPosition.x * tileSize.width),\n y: position.y + scale * (gridPosition.y * tileSize.height)\n }, {\n width: scale * tileSize.width,\n height: scale * tileSize.height\n }, {\n x: tileSize.width * tilesheetPosition.x,\n y: tileSize.height * tilesheetPosition.y\n }, {\n width: tileSize.width,\n height: tileSize.height\n });\n}\n// tilegrid: a 2d array of numbers representing terrain types\n// spritesheets: An object, each key is the value that represents a tile from this sheet\nfunction tiles(ctx, position, tileGrid, spriteSheets, scale) {\n var dirValues = {\n NW: 1,\n N: 2,\n NE: 4,\n E: 8,\n SE: 16,\n S: 32,\n SW: 64,\n W: 128\n };\n var _loop_1 = function (y) {\n var _loop_2 = function (x) {\n if (tileGrid[y][x] === 0) {\n return \"continue\";\n }\n // REAL VALUES\n var tl = y > 0 ? tileGrid[y - 1][x - 1] : 0;\n var tm = y > 0 ? tileGrid[y - 1][x] : 0;\n var tr = y > 0 ? tileGrid[y - 1][x + 1] : 0;\n var ml = tileGrid[y][x - 1];\n var m = tileGrid[y][x];\n var mr = tileGrid[y][x + 1];\n var bl = y < tileGrid.length - 1 ? tileGrid[y + 1][x - 1] : 0;\n var bm = y < tileGrid.length - 1 ? tileGrid[y + 1][x] : 0;\n var br = y < tileGrid.length - 1 ? tileGrid[y + 1][x + 1] : 0;\n // BINARY VALUES\n var n = m === tm ? 1 : 0;\n var e = m === mr ? 1 : 0;\n var s = m === bm ? 1 : 0;\n var w = m === ml ? 1 : 0;\n var nw = m === tm && m === ml ? (m === tl ? 1 : 0) : 0;\n var ne = m === tm && m === mr ? (m === tr ? 1 : 0) : 0;\n var sw = m === bm && m === ml ? (m === bl ? 1 : 0) : 0;\n var se = m === bm && m === mr ? (m === br ? 1 : 0) : 0;\n var sum = dirValues.NW * nw +\n dirValues.N * n +\n dirValues.NE * ne +\n dirValues.E * e +\n dirValues.SE * se +\n dirValues.S * s +\n dirValues.SW * sw +\n dirValues.W * w;\n // Figure out which sheet we're supposed to be drawing from\n var sheet = spriteSheets.filter(function (sheet) {\n return sheet.type === tileGrid[y][x];\n })[0];\n if (!sheet) {\n console.error(\"Sheet \".concat(tileGrid[y][x], \" not found!\"));\n return { value: void 0 };\n }\n var selections = sheet.tiles.filter(function (x) { return x.type === sum; });\n // Note: Just picking a random one of the variants every time we render for now\n var selection = selections[Math.floor(Math.random() * selections.length)];\n if (selection) {\n tile(ctx, position, sheet.image, { x: x, y: y }, selection.position, scale, selection.size);\n }\n else {\n console.error(\"Tile not defined \".concat(sum));\n }\n };\n for (var x = 0; x < tileGrid[y].length; x++) {\n var state_2 = _loop_2(x);\n if (typeof state_2 === \"object\")\n return state_2;\n }\n };\n for (var y = 0; y < tileGrid.length; y++) {\n var state_1 = _loop_1(y);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n}\nvar defaultDropShadow = {\n shadowcolour: '#000000',\n shadowBlur: 6,\n shadowOffsetX: 4,\n shadowOffsetY: 4\n};\nfunction shadow(ctx, drawingOperations, options) {\n if (options === void 0) { options = defaultDropShadow; }\n freshContext(ctx, function () {\n options = (0, object_1.merge)(defaultDropShadow, options);\n ctx.shadowColor = options.shadowcolour;\n ctx.shadowBlur = options.shadowBlur;\n ctx.shadowOffsetX = options.shadowOffsetX;\n ctx.shadowOffsetY = options.shadowOffsetY;\n drawingOperations();\n });\n}\nfunction dodge(ctx, drawingOperations) {\n freshContext(ctx, function () {\n ctx.globalCompositeOperation = 'color-dodge';\n drawingOperations();\n });\n}\nfunction overlay(ctx, drawingOperations) {\n freshContext(ctx, function () {\n ctx.globalCompositeOperation = 'overlay';\n drawingOperations();\n });\n}\nfunction rotation(ctx, drawingOperations, rotation, around) {\n freshContext(ctx, function () {\n ctx.translate(around.x, around.y);\n ctx.rotate(number_1.default.toRadians(rotation));\n ctx.translate(-around.x, -around.y);\n drawingOperations();\n });\n}\nfunction transparency(ctx, drawingOperations, alpha) {\n if (alpha === void 0) { alpha = 0.25; }\n freshContext(ctx, function () {\n ctx.globalAlpha = alpha;\n drawingOperations();\n });\n}\nfunction create(ctx) {\n return {\n circle: function (position, radius, options) {\n if (options === void 0) { options = defaultCircle; }\n circle(ctx, position, radius, options);\n },\n clear: function (colour) {\n clear(ctx, colour);\n },\n clearRect: function (rectangle, colour) {\n clearRect(ctx, rectangle, colour);\n },\n curve: function (from, to, controlPoints, options) {\n curve(ctx, from, to, controlPoints, options);\n },\n square: function (position, size, options) {\n if (options === void 0) { options = defaultRect; }\n square(ctx, position, size, options);\n },\n rect: function (rectangle, options) {\n if (options === void 0) { options = defaultRect; }\n rect(ctx, rectangle, options);\n },\n image: function (img, position, size) {\n image(ctx, img, position, size);\n },\n line: function (from, to, options) {\n if (options === void 0) { options = defaultLine; }\n line(ctx, from, to, options);\n },\n sprite: function (spr) {\n sprite(ctx, spr);\n },\n subImage: function (img, position, size, subPosition, subSize) {\n subImage(ctx, img, position, size, subPosition, subSize);\n },\n text: function (position, text, colour, font) {\n if (position === void 0) { position = { x: 0, y: 0 }; }\n if (text === void 0) { text = ''; }\n if (colour === void 0) { colour = '#000000'; }\n if (font === void 0) { font = '16pt sans-serif'; }\n txt(ctx, position, text, colour, font);\n },\n tiles: function (position, tileGrid, spriteSheets, scale) {\n tiles(ctx, position, tileGrid, spriteSheets, scale);\n },\n shadow: function (drawingOperations, options) {\n if (options === void 0) { options = defaultDropShadow; }\n shadow(ctx, drawingOperations, options);\n },\n dodge: function (drawingOperations) {\n dodge(ctx, drawingOperations);\n },\n overlay: function (drawingOperations) {\n overlay(ctx, drawingOperations);\n },\n transparency: function (drawingOperations, alpha) {\n if (alpha === void 0) { alpha = 0.25; }\n transparency(ctx, drawingOperations, alpha);\n },\n rotation: function (drawingOperations, rotateBy, around) {\n if (rotateBy === void 0) { rotateBy = 0; }\n if (around === void 0) { around = { x: 0, y: 0 }; }\n rotation(ctx, drawingOperations, rotateBy, around);\n // rotation()\n }\n };\n}\nexports.default = {\n circle: circle,\n clear: clear,\n clearRect: clearRect,\n create: create,\n curve: curve,\n dodge: dodge,\n image: image,\n line: line,\n overlay: overlay,\n rotation: rotation,\n rect: rect,\n shadow: shadow,\n sprite: sprite,\n square: square,\n subImage: subImage,\n text: txt,\n tiles: tiles,\n transparency: transparency\n};\n\n\n/***/ }),\n\n/***/ \"./src/grid.ts\":\n/*!*********************!*\\\n !*** ./src/grid.ts ***!\n \\*********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction make2DArray(width, height, defaultValue) {\n if (width === void 0) { width = 1; }\n if (height === void 0) { height = 1; }\n if (defaultValue === void 0) { defaultValue = null; }\n var result = [];\n for (var y = 0; y < height; y++) {\n var row = [];\n for (var x = 0; x < width; x++) {\n row.push(defaultValue);\n }\n result.push(row);\n }\n return result;\n}\nfunction copyTiles(tiles) {\n return tiles.map(function (arr) { return arr.slice(); });\n}\nvar defaultGrid = {\n pos: { x: 0, y: 0 },\n visible: true,\n divisions: 4,\n tileWidth: 8,\n tileHeight: 8,\n scale: 1\n};\nfunction fill(tiles, position, target, replacement) {\n var gridClone = copyTiles(tiles);\n function floodFill(position, target, replacement) {\n if (target === replacement) {\n return;\n }\n var valueAtPosition = gridClone[position.y][position.x];\n if (valueAtPosition !== target) {\n return;\n }\n var isWithinBounds = position.x < gridClone[position.y].length &&\n position.x >= 0 &&\n position.y < gridClone.length &&\n position.y >= 0;\n if (isWithinBounds) {\n gridClone[position.y][position.x] = replacement;\n if (position.y < gridClone.length - 1) {\n floodFill({ x: position.x, y: position.y + 1 }, target, replacement);\n }\n if (position.y > 0) {\n floodFill({ x: position.x, y: position.y - 1 }, target, replacement);\n }\n if (position.x < gridClone[0].length - 1) {\n floodFill({ x: position.x + 1, y: position.y }, target, replacement);\n }\n if (position.x > 0) {\n floodFill({ x: position.x - 1, y: position.y }, target, replacement);\n }\n }\n return;\n }\n if (true) {\n floodFill(position, target, replacement);\n }\n return gridClone;\n}\nfunction create(size, options) {\n if (options === void 0) { options = defaultGrid; }\n options = __assign(__assign({}, defaultGrid), options);\n var tiles = make2DArray(size.width, size.height, 0);\n var pos = { x: options.pos.x, y: options.pos.y };\n var visible = options.visible;\n var divisions = options.divisions;\n var tileWidth = options.tileWidth;\n var tileHeight = options.tileHeight;\n var tileSize = options.tileWidth;\n var scale = options.scale;\n return {\n divisions: divisions,\n pos: pos,\n tileHeight: tileHeight,\n tiles: tiles,\n tileWidth: tileWidth,\n visible: visible,\n size: size,\n tileSize: tileSize,\n scale: scale\n };\n}\nexports.default = {\n create: create,\n fill: fill,\n copyTiles: copyTiles\n};\n\n\n/***/ }),\n\n/***/ \"./src/input.ts\":\n/*!**********************!*\\\n !*** ./src/input.ts ***!\n \\**********************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_41894__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.gamepad = exports.keyboard = exports.mouse = void 0;\nvar mouse_1 = __nested_webpack_require_41894__(/*! ./input/mouse */ \"./src/input/mouse.ts\");\nvar keyboard_1 = __nested_webpack_require_41894__(/*! ./input/keyboard */ \"./src/input/keyboard.ts\");\nvar gamepad_1 = __nested_webpack_require_41894__(/*! ./input/gamepad */ \"./src/input/gamepad.ts\");\nfunction createMouse(canvas) {\n var mouseInput = mouse_1.default.create(canvas);\n return {\n start: function () { return mouseInput.start(); },\n update: function () { return mouseInput.update(); },\n getState: function () { return mouseInput.getState(); }\n };\n}\nfunction createKeyboard(canvas) {\n var keyboardInput = keyboard_1.default.create(canvas);\n return {\n start: function () { return keyboardInput.start(); },\n update: function () { return keyboardInput.update(); },\n getState: function () { return keyboardInput.getState(); }\n };\n}\nfunction createGamepad() {\n var gamepadInput = gamepad_1.default.create();\n return {\n start: function () { return gamepadInput.start(); },\n update: function () { return gamepadInput.update(); },\n getState: function () { return gamepadInput.getState(); }\n };\n}\nexports.mouse = {\n create: createMouse\n};\nexports.keyboard = {\n create: createKeyboard\n};\nexports.gamepad = {\n create: createGamepad\n};\n\n\n/***/ }),\n\n/***/ \"./src/input/gamepad.ts\":\n/*!******************************!*\\\n !*** ./src/input/gamepad.ts ***!\n \\******************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create() {\n var gamepad = {};\n var connected = function (e) {\n console.log(e.gamepad);\n };\n var disconnected = function (e) {\n console.log(e.gamepad);\n };\n var start = function () {\n window.addEventListener('gamepadconnected', connected);\n window.addEventListener('gamepaddisconnected', disconnected);\n };\n var update = function () { };\n return {\n getState: function () { return gamepad; },\n start: start,\n update: update\n };\n}\nexports.default = { create: create };\n\n\n/***/ }),\n\n/***/ \"./src/input/keyboard.ts\":\n/*!*******************************!*\\\n !*** ./src/input/keyboard.ts ***!\n \\*******************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_44437__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar keys_1 = __nested_webpack_require_44437__(/*! ./keys */ \"./src/input/keys.ts\");\nvar keys = defaultState();\nfunction defaultState() {\n var defaultState = {\n pressed: false,\n justPressed: false,\n released: false,\n justReleased: false\n };\n return keys_1.default.reduce(function (acc, key) {\n var label = key.name;\n delete key['label'];\n acc[label] = __assign(__assign({}, key), defaultState);\n return acc;\n }, {});\n}\nfunction getKey(event, keys) {\n var result = null;\n var objectKeys = Object.keys(keys);\n for (var i = 0; i < objectKeys.length; i++) {\n if (keys[objectKeys[i]].code === event.code) {\n result = keys[objectKeys[i]];\n }\n }\n if (!result) {\n console.error(\"No key definition found for \".concat(event.code));\n }\n return result;\n}\nfunction preventDefaultArrows(event) {\n var keys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', ' '];\n if (keys.includes(event.key)) {\n event.preventDefault();\n }\n}\nfunction down(event) {\n preventDefaultArrows(event);\n var key = getKey(event, keys);\n if (!key.pressed) {\n key.justPressed = true;\n }\n key.pressed = true;\n}\nfunction up(event) {\n var key = getKey(event, keys);\n if (!key.released) {\n key.justReleased = true;\n }\n key.pressed = false;\n key.released = true;\n}\nfunction update() {\n // reset the keys \"just\" properties\n Object.keys(keys).forEach(function (key) {\n keys[key].justPressed = false;\n keys[key].justReleased = false;\n });\n}\nfunction create(canvas) {\n var start = function () {\n // keyboard events\n canvas.addEventListener('keydown', down);\n canvas.addEventListener('keyup', up);\n };\n return {\n start: start,\n update: update,\n getState: function () { return keys; }\n };\n}\nexports.default = { create: create };\n\n\n/***/ }),\n\n/***/ \"./src/input/keys.ts\":\n/*!***************************!*\\\n !*** ./src/input/keys.ts ***!\n \\***************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar allKeys = [\n { code: 'Backspace', name: 'backspace' },\n { code: 'Tab', name: 'tab' },\n { code: 'Enter', name: 'enter' },\n { code: 'ShiftLeft', name: 'shift' },\n { code: 'ControlLeft', name: 'ctrl' },\n { code: 'AltLeft', name: 'alt' },\n { code: 'CapsLock', name: 'caps' },\n { code: 'Escape', name: 'escape' },\n { code: 'Space', name: 'space' },\n { code: 'PageUp', name: 'pageUp' },\n { code: 'PageDown', name: 'pageDown' },\n { code: 'End', name: 'end' },\n { code: 'Home', name: 'home' },\n { code: 'ArrowLeft', name: 'left' },\n { code: 'ArrowUp', name: 'up' },\n { code: 'ArrowRight', name: 'right' },\n { code: 'ArrowDown', name: 'down' },\n { code: 'Insert', name: 'insert' },\n { code: 'Delete', name: 'delete' },\n { code: 'Digit0', name: 'zero' },\n { code: 'Digit1', name: 'one' },\n { code: 'Digit2', name: 'two' },\n { code: 'Digit3', name: 'three' },\n { code: 'Digit4', name: 'four' },\n { code: 'Digit5', name: 'five' },\n { code: 'Digit6', name: 'six' },\n { code: 'Digit7', name: 'seven' },\n { code: 'Digit8', name: 'eight' },\n { code: 'Digit9', name: 'nine' },\n { code: 'KeyA', name: 'A' },\n { code: 'KeyB', name: 'B' },\n { code: 'KeyC', name: 'C' },\n { code: 'KeyD', name: 'D' },\n { code: 'KeyE', name: 'E' },\n { code: 'KeyF', name: 'F' },\n { code: 'KeyG', name: 'G' },\n { code: 'KeyH', name: 'H' },\n { code: 'KeyI', name: 'I' },\n { code: 'KeyJ', name: 'J' },\n { code: 'KeyK', name: 'K' },\n { code: 'KeyL', name: 'L' },\n { code: 'KeyM', name: 'M' },\n { code: 'KeyN', name: 'N' },\n { code: 'KeyO', name: 'O' },\n { code: 'KeyP', name: 'P' },\n { code: 'KeyQ', name: 'Q' },\n { code: 'KeyR', name: 'R' },\n { code: 'KeyS', name: 'S' },\n { code: 'KeyT', name: 'T' },\n { code: 'KeyU', name: 'U' },\n { code: 'KeyV', name: 'V' },\n { code: 'KeyW', name: 'W' },\n { code: 'KeyX', name: 'X' },\n { code: 'KeyY', name: 'Y' },\n { code: 'KeyZ', name: 'Z' },\n { code: 'OSLeft', name: 'superLeft' },\n { code: 'OSRight', name: 'superRight' },\n { code: 'ContextMenu', name: 'menu' },\n { code: 'Numpad0', name: 'num0' },\n { code: 'Numpad1', name: 'num1' },\n { code: 'Numpad2', name: 'num2' },\n { code: 'Numpad3', name: 'num3' },\n { code: 'Numpad4', name: 'num4' },\n { code: 'Numpad5', name: 'num5' },\n { code: 'Numpad6', name: 'num6' },\n { code: 'Numpad7', name: 'num7' },\n { code: 'Numpad8', name: 'num8' },\n { code: 'Numpad9', name: 'num9' },\n { code: 'NumpadMultiply', name: 'multiply' },\n { code: 'NumpaddAdd', name: 'add' },\n { code: 'NumpaddDivide', name: 'divide' },\n { code: 'NumpadDecimal', name: 'point' },\n { code: 'NumpadMinus', name: 'minus' },\n { code: 'F1', name: 'F1' },\n { code: 'F2', name: 'F2' },\n { code: 'F3', name: 'F3' },\n { code: 'F4', name: 'F4' },\n { code: 'F5', name: 'F5' },\n { code: 'F6', name: 'F6' },\n { code: 'F7', name: 'F7' },\n { code: 'F8', name: 'F8' },\n { code: 'F9', name: 'F9' },\n { code: 'F10', name: 'F10' },\n { code: 'F11', name: 'F11' },\n { code: 'F12', name: 'F12' },\n { code: 'NumLock', name: 'numLock' },\n { code: 'ScrollLock', name: 'scrollLock' },\n { code: 'Semicolon', name: 'semiColon' },\n { code: 'Equal', name: 'equals' },\n { code: 'Comma', name: 'comma' },\n { code: 'Minus', name: 'dash' },\n { code: 'Period', name: 'dot' },\n { code: 'Slash', name: 'forewardSlash' },\n { code: 'BracketLeft', name: 'openBracket' },\n { code: 'IntlBackslash', name: 'backSlash' },\n { code: 'BracketRight', name: 'closeBracket' },\n { code: 'Quote', name: 'quote' },\n { code: 'MetaLeft', name: 'metaLeft' }\n];\nexports.default = allKeys;\n\n\n/***/ }),\n\n/***/ \"./src/input/mouse.ts\":\n/*!****************************!*\\\n !*** ./src/input/mouse.ts ***!\n \\****************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create(canvas) {\n var defaultState = function () {\n return {\n position: { x: 0, y: 0 },\n left: defaultButtonState(),\n wheel: defaultWheelState(),\n right: defaultButtonState()\n };\n };\n var defaultButtonState = function () {\n return {\n pressed: false,\n justPressed: false,\n released: false,\n justReleased: false\n };\n };\n var defaultWheelState = function () {\n var buttonState = defaultButtonState();\n return __assign(__assign({}, buttonState), { moved: false, direction: 'up' });\n };\n var prevMouse = defaultState();\n var mouse = defaultState();\n var clone = function (state) {\n return Object.assign({}, state);\n };\n var relative = function (event) {\n var bounds = canvas.getBoundingClientRect();\n return {\n x: event.clientX - bounds.left,\n y: event.clientY - bounds.top\n };\n };\n var move = function (event) {\n var newPos = relative(event);\n mouse.position = newPos;\n };\n var down = function (event) {\n switch (event.which) {\n case 1:\n if (!mouse.left.pressed) {\n mouse.left.justPressed = true;\n }\n mouse.left.pressed = true;\n break;\n case 2:\n if (!mouse.wheel.pressed) {\n mouse.wheel.justPressed = true;\n }\n mouse.wheel.pressed = true;\n break;\n case 3:\n if (!mouse.right.pressed) {\n mouse.right.justPressed = true;\n }\n mouse.right.pressed = true;\n break;\n }\n };\n var up = function (event) {\n switch (event.which) {\n case 1:\n if (!mouse.left.released) {\n mouse.left.justReleased = true;\n }\n mouse.left.released = true;\n mouse.left.pressed = false;\n break;\n case 2:\n if (!mouse.wheel.released) {\n mouse.wheel.justReleased = true;\n }\n mouse.wheel.released = true;\n mouse.wheel.pressed = false;\n break;\n case 3:\n if (!mouse.right.released) {\n mouse.right.justReleased = true;\n }\n mouse.right.released = true;\n mouse.right.pressed = false;\n break;\n }\n };\n var wheel = function (event) {\n mouse.wheel.moved = event.deltaY === 0 ? false : true;\n if (mouse.wheel.moved !== false) {\n mouse.wheel.direction = event.deltaY < 0 ? 'up' : 'down';\n }\n };\n var update = function () {\n mouse.wheel.moved = false;\n mouse.left.justPressed = false;\n mouse.right.justPressed = false;\n mouse.left.justReleased = false;\n mouse.right.justReleased = false;\n mouse.wheel.justPressed = false;\n mouse.wheel.justReleased = false;\n prevMouse = clone(mouse);\n };\n var start = function () {\n // mouse events\n canvas.addEventListener('mousemove', move);\n canvas.addEventListener('mousedown', down);\n canvas.addEventListener('mouseup', up);\n canvas.addEventListener('wheel', wheel);\n // default mouse position, center of screen\n mouse.position.x = canvas.width / 2;\n mouse.position.y = canvas.height / 2;\n };\n return {\n getState: function () { return mouse; },\n start: start,\n update: update\n };\n}\nexports.default = { create: create };\n\n\n/***/ }),\n\n/***/ \"./src/sprite.ts\":\n/*!***********************!*\\\n !*** ./src/sprite.ts ***!\n \\***********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create(position, size, rotation, texture, colour) {\n if (rotation === void 0) { rotation = 0; }\n if (colour === void 0) { colour = '#ffffff'; }\n var frames = [];\n return {\n size: size,\n texture: texture,\n colour: colour,\n frame: 0,\n position: position,\n setFrames: function (newFrames) {\n frames = newFrames;\n },\n addFrame: function (frame) {\n frames.push(frame);\n },\n get frames() {\n return frames;\n },\n get rotation() {\n return rotation;\n },\n set rotation(degrees) {\n rotation = degrees >= 360 ? 360 - degrees : degrees;\n }\n };\n}\nexports.default = {\n create: create\n};\n\n\n/***/ }),\n\n/***/ \"./src/storage.ts\":\n/*!************************!*\\\n !*** ./src/storage.ts ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clear = exports.remove = exports.load = exports.save = void 0;\nfunction save(key, value) {\n localStorage.setItem(key, value);\n}\nexports.save = save;\nfunction load(key) {\n return localStorage.getItem(key);\n}\nexports.load = load;\nfunction remove(key) {\n localStorage.removeItem(key);\n}\nexports.remove = remove;\nfunction clear() {\n localStorage.clear();\n}\nexports.clear = clear;\n\n\n/***/ }),\n\n/***/ \"./src/types.ts\":\n/*!**********************!*\\\n !*** ./src/types.ts ***!\n \\**********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\n\n/***/ }),\n\n/***/ \"./src/utils/number.ts\":\n/*!*****************************!*\\\n !*** ./src/utils/number.ts ***!\n \\*****************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clamp = exports.toDegrees = exports.toRadians = void 0;\nfunction toRadians(degrees) {\n return degrees * (Math.PI / 180);\n}\nexports.toRadians = toRadians;\nfunction toDegrees(radians) {\n return radians * (180 / Math.PI);\n}\nexports.toDegrees = toDegrees;\nfunction clamp(value, min, max) {\n if (min > max) {\n console.error(\"clamp: the minimum (\".concat(min, \") and maximum (\").concat(max, \") have been passed in the wrong order\"));\n return value;\n }\n if (value < min) {\n return min;\n }\n if (value > max) {\n return max;\n }\n return value;\n}\nexports.clamp = clamp;\nexports.default = {\n toRadians: toRadians,\n toDegrees: toDegrees\n};\n\n\n/***/ }),\n\n/***/ \"./src/utils/object.ts\":\n/*!*****************************!*\\\n !*** ./src/utils/object.ts ***!\n \\*****************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = exports.clone = void 0;\n// TODO: Handle Arrays\nfunction deepClone(obj) {\n var result = {};\n Object.keys(obj).forEach(function (key) {\n switch (typeof obj[key]) {\n case 'object':\n result[key] = deepClone(obj[key]);\n break;\n default:\n result[key] = obj[key];\n }\n });\n return result;\n}\nfunction shallowClone(obj) {\n return __assign({}, obj);\n}\nfunction clone(obj, deep) {\n if (deep === void 0) { deep = true; }\n return deep === true ? deepClone(obj) : shallowClone(obj);\n}\nexports.clone = clone;\n// TODO: Handle Arrays\nfunction deepMerge(a, b) {\n var result = {};\n Object.keys(a).forEach(function (key) {\n if (typeof a[key] === 'object') {\n result[key] = b[key] === undefined ? a[key] : merge(a[key], b[key]);\n }\n else {\n result[key] = b[key] === undefined ? a[key] : b[key];\n }\n });\n // values that only exist on b need to be inserted afterwards\n Object.keys(b).forEach(function (key) {\n if (a[key] === undefined) {\n result[key] = b[key];\n }\n });\n return result;\n}\nfunction shallowMerge(a, b) {\n return __assign(__assign({}, a), b);\n}\nfunction merge(a, b, deep) {\n if (deep === void 0) { deep = true; }\n return deep === true ? deepMerge(a, b) : shallowMerge(a, b);\n}\nexports.merge = merge;\nexports.default = {\n merge: merge,\n clone: clone\n};\n\n\n/***/ }),\n\n/***/ \"./src/vec2.ts\":\n/*!*********************!*\\\n !*** ./src/vec2.ts ***!\n \\*********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create(_x, _y) {\n var x = _x;\n var y = _y;\n var add = function (v) {\n x += v.x;\n y += v.y;\n };\n var addScalar = function (s) {\n x += s;\n y += s;\n };\n var divide = function (v) {\n x /= v.x;\n y /= v.y;\n };\n var divideScalar = function (s) {\n x /= s;\n y /= s;\n };\n var dot = function (v) {\n return x * v.x + y * v.y;\n };\n var getLength = function () {\n return Math.sqrt(x * x + y * y);\n };\n var getOpposite = function () {\n return create(-x, -y);\n };\n var getPerp = function () {\n return create(-y, x);\n };\n var isEqualTo = function (v) {\n return x == v.x && y == v.y;\n };\n var multiply = function (v) {\n x *= v.x;\n y *= v.y;\n };\n var multiplyScalar = function (s) {\n x *= s;\n y *= s;\n };\n var normalise = function () {\n var l = getLength();\n x = x / l;\n y = y / l;\n };\n var setLength = function (l) {\n normalise();\n multiplyScalar(l);\n };\n var subtract = function (v) {\n x -= v.x;\n y -= v.y;\n };\n var subtractScalar = function (s) {\n x -= s;\n y -= s;\n };\n return {\n add: add,\n addScalar: addScalar,\n clone: clone,\n divide: divide,\n divideScalar: divideScalar,\n dot: dot,\n getLength: getLength,\n getOpposite: getOpposite,\n getPerp: getPerp,\n isEqualTo: isEqualTo,\n multiply: multiply,\n multiplyScalar: multiplyScalar,\n normalise: normalise,\n setLength: setLength,\n subtract: subtract,\n subtractScalar: subtractScalar,\n set x(_x) {\n x = _x;\n },\n get x() {\n return x;\n },\n set y(_y) {\n y = _y;\n },\n get y() {\n return y;\n }\n };\n}\nvar fromDegrees = function (degrees) {\n var rad = degrees * (Math.PI / 180);\n return create(Math.cos(rad), Math.sin(rad));\n};\nvar clone = function (v) {\n return create(v.x, v.y);\n};\nexports.default = {\n clone: clone,\n create: create,\n fromDegrees: fromDegrees\n};\n\n\n/***/ })\n\n/******/ });\n});\n//# sourceMappingURL=bramble.js.map\n\n//# sourceURL=webpack://snowfall/./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js?");
28
+ eval("(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse {}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_539__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_539__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_539__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_539__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_539__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_539__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_539__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_539__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_539__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_539__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_539__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_539__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_539__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_539__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_539__.p = \"/js/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_539__(__nested_webpack_require_539__.s = \"./src/bramble.ts\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./src/assets.ts\":\n/*!***********************!*\\\n !*** ./src/assets.ts ***!\n \\***********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadAllSounds = exports.loadSound = exports.loadAllTerrain = exports.loadTerrain = exports.loadAllImages = exports.loadImage = exports.loadAllText = exports.loadText = void 0;\nfunction loadText(path) {\n return new Promise(function (resolve, reject) {\n var request = new XMLHttpRequest();\n request.addEventListener('load', function (_) {\n resolve(request.responseText);\n });\n request.addEventListener('error', function (event) {\n reject(event);\n });\n request.open('GET', path);\n request.send();\n });\n}\nexports.loadText = loadText;\nfunction loadAllText(paths) {\n if (paths === void 0) { paths = []; }\n return Promise.all(paths.map(function (x) { return loadText(x); }));\n}\nexports.loadAllText = loadAllText;\nfunction loadImage(path) {\n return new Promise(function (resolve, reject) {\n var img = new Image();\n img.addEventListener('load', function (_) {\n resolve(img);\n });\n img.addEventListener('error', function (err) {\n reject(err);\n });\n img.src = path;\n });\n}\nexports.loadImage = loadImage;\nfunction loadAllImages(paths) {\n if (paths === void 0) { paths = []; }\n return Promise.all(paths.map(function (x) { return loadImage(x); }));\n}\nexports.loadAllImages = loadAllImages;\n// Downloads a Terrain file,\n// reads it,\n// downloads the related image file,\n// returns a new Terrain object\nfunction loadTerrain(path) {\n var description;\n return loadText(path)\n .then(function (json) {\n description = JSON.parse(json);\n return loadImage(description.path);\n })\n .then(function (image) { return ({\n name: description.name,\n type: description.type,\n image: image,\n tiles: description.tiles\n }); });\n}\nexports.loadTerrain = loadTerrain;\nfunction loadAllTerrain(paths) {\n if (paths === void 0) { paths = []; }\n return Promise.all(paths.map(function (x) { return loadTerrain(x); }));\n}\nexports.loadAllTerrain = loadAllTerrain;\nfunction loadSound(path) {\n return new Promise(function (resolve, reject) {\n var request = new XMLHttpRequest();\n request.responseType = 'arraybuffer';\n request.addEventListener('load', function (_) {\n resolve(request.response);\n });\n request.addEventListener('error', function (event) {\n reject(event);\n });\n request.open('GET', path);\n request.send();\n });\n}\nexports.loadSound = loadSound;\nfunction loadAllSounds(paths) {\n if (paths === void 0) { paths = []; }\n return Promise.all(paths.map(function (x) { return loadSound(x); }));\n}\nexports.loadAllSounds = loadAllSounds;\nfunction create() {\n var _this = this;\n var store = {\n images: new Map(),\n sounds: new Map(),\n data: new Map(),\n };\n var add = function (label, type, path) { return __awaiter(_this, void 0, void 0, function () {\n var _a, img, snd, dta;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = type;\n switch (_a) {\n case 'image': return [3 /*break*/, 1];\n case 'sound': return [3 /*break*/, 3];\n }\n return [3 /*break*/, 5];\n case 1: return [4 /*yield*/, loadImage(path)];\n case 2:\n img = _b.sent();\n store.images.set(label, img);\n return [3 /*break*/, 7];\n case 3: return [4 /*yield*/, loadSound(path)];\n case 4:\n snd = _b.sent();\n store.sounds.set(label, snd);\n return [3 /*break*/, 7];\n case 5: return [4 /*yield*/, loadText(path)];\n case 6:\n dta = _b.sent();\n store.data.set(label, dta);\n _b.label = 7;\n case 7: return [2 /*return*/];\n }\n });\n }); };\n var remove = function (label, type) {\n switch (type) {\n case 'image':\n store.images.delete(label);\n break;\n case 'sound':\n store.sounds.delete(label);\n break;\n default: store.data.delete(label);\n }\n };\n return { add: add, remove: remove, assets: store };\n}\nexports.default = { create: create };\n\n\n/***/ }),\n\n/***/ \"./src/bramble.ts\":\n/*!************************!*\\\n !*** ./src/bramble.ts ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_11458__) {\n\n\"use strict\";\n\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.collisions = exports.load = exports.save = exports.vec2 = exports.sprite = exports.mouse = exports.keyboard = exports.graphics = exports.grid = exports.game = void 0;\nvar game_1 = __nested_webpack_require_11458__(/*! ./game */ \"./src/game.ts\");\nObject.defineProperty(exports, \"game\", { enumerable: true, get: function () { return game_1.default; } });\nvar grid_1 = __nested_webpack_require_11458__(/*! ./grid */ \"./src/grid.ts\");\nObject.defineProperty(exports, \"grid\", { enumerable: true, get: function () { return grid_1.default; } });\nvar graphics_1 = __nested_webpack_require_11458__(/*! ./graphics */ \"./src/graphics.ts\");\nObject.defineProperty(exports, \"graphics\", { enumerable: true, get: function () { return graphics_1.default; } });\nvar input_1 = __nested_webpack_require_11458__(/*! ./input */ \"./src/input.ts\");\nObject.defineProperty(exports, \"keyboard\", { enumerable: true, get: function () { return input_1.keyboard; } });\nObject.defineProperty(exports, \"mouse\", { enumerable: true, get: function () { return input_1.mouse; } });\nvar sprite_1 = __nested_webpack_require_11458__(/*! ./sprite */ \"./src/sprite.ts\");\nObject.defineProperty(exports, \"sprite\", { enumerable: true, get: function () { return sprite_1.default; } });\nvar vec2_1 = __nested_webpack_require_11458__(/*! ./vec2 */ \"./src/vec2.ts\");\nObject.defineProperty(exports, \"vec2\", { enumerable: true, get: function () { return vec2_1.default; } });\nvar storage_1 = __nested_webpack_require_11458__(/*! ./storage */ \"./src/storage.ts\");\nObject.defineProperty(exports, \"save\", { enumerable: true, get: function () { return storage_1.save; } });\nObject.defineProperty(exports, \"load\", { enumerable: true, get: function () { return storage_1.load; } });\nvar collision_1 = __nested_webpack_require_11458__(/*! ./collision */ \"./src/collision.ts\");\nObject.defineProperty(exports, \"collisions\", { enumerable: true, get: function () { return collision_1.default; } });\n__exportStar(__nested_webpack_require_11458__(/*! ./types */ \"./src/types.ts\"), exports);\n\n\n/***/ }),\n\n/***/ \"./src/collision.ts\":\n/*!**************************!*\\\n !*** ./src/collision.ts ***!\n \\**************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_14356__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bramble_1 = __nested_webpack_require_14356__(/*! ./bramble */ \"./src/bramble.ts\");\n// works\nfunction pointVsRect(point, rect) {\n return (point.x >= rect.x &&\n point.y >= rect.y &&\n point.x < rect.x + rect.width &&\n point.y < rect.y + rect.height);\n}\n// works\nfunction rectVsRect(rectA, rectB) {\n return (rectA.x < rectB.x + rectB.width &&\n rectA.x + rectA.width > rectB.x &&\n rectA.y < rectB.y + rectB.height &&\n rectA.y + rectA.height > rectB.y);\n}\n// works\n// returns false if no collision occurred, otherwise it returns an object\n// containing the results of the collision\n// { near, far, normal }\nfunction lineVsRect(line, rect) {\n var from = bramble_1.vec2.create(line.from.x, line.from.y);\n var to = bramble_1.vec2.create(line.to.x, line.to.y);\n var dir = bramble_1.vec2.clone(to);\n dir.subtract(from);\n var invdir = {\n x: 1.0 / dir.x,\n y: 1.0 / dir.y\n };\n var timeNear = {\n x: (rect.x - line.from.x) * invdir.x,\n y: (rect.y - line.from.y) * invdir.y\n };\n var timeFar = {\n x: (rect.x + rect.width - line.from.x) * invdir.x,\n y: (rect.y + rect.height - line.from.y) * invdir.y\n };\n if (isNaN(timeNear.x) || isNaN(timeNear.y)) {\n return false;\n }\n if (isNaN(timeFar.x) || isNaN(timeFar.y)) {\n return false;\n }\n // sort the distances\n var tempNear = __assign({}, timeNear);\n var tempFar = __assign({}, timeFar);\n if (tempNear.x > tempFar.x) {\n timeNear.x = tempFar.x;\n timeFar.x = tempNear.x;\n }\n tempNear = __assign({}, timeNear);\n tempFar = __assign({}, timeFar);\n if (tempNear.y > tempFar.y) {\n timeNear.y = tempFar.y;\n timeFar.y = tempNear.y;\n }\n // no collision detected\n if (timeNear.x > timeFar.y || timeNear.y > timeFar.x) {\n return false;\n }\n var hitNear = Math.max(timeNear.x, timeNear.y);\n var hitFar = Math.min(timeFar.x, timeFar.y);\n // abort if ray is facing away from our object\n if (hitFar < 0) {\n return false;\n }\n // abort if the ray does not reach the object\n if (hitNear > 1) {\n return false;\n }\n // abort if the ray's first collision is behind us\n if (hitNear < 0) {\n return false;\n }\n // construct a vector to hold the normal of the surface\n var normal = bramble_1.vec2.create(0, 0);\n if (timeNear.x > timeNear.y) {\n if (invdir.x < 0) {\n normal.x = 1;\n normal.y = 0;\n }\n else {\n normal.x = -1;\n normal.y = 0;\n }\n }\n else if (timeNear.x < timeNear.y) {\n if (invdir.y < 0) {\n normal.x = 0;\n normal.y = 1;\n }\n else {\n normal.x = 0;\n normal.y = -1;\n }\n }\n else if (timeNear.x === timeNear.y) {\n if (invdir.x < 0 && invdir.y < 0) {\n normal.x = -1;\n normal.y = 1;\n }\n else if (invdir.x > 0 && invdir.y < 0) {\n normal.x = 1;\n normal.y = 1;\n }\n else if (invdir.x < 0 && invdir.y > 0) {\n normal.x = -1;\n normal.y = -1;\n }\n else if (invdir.x > 0 && invdir.y > 0) {\n normal.x = 1;\n normal.y = -1;\n }\n }\n // collided with the object!\n return {\n normal: normal,\n near: bramble_1.vec2.create(from.x + hitNear * dir.x, from.y + hitNear * dir.y),\n far: bramble_1.vec2.create(from.x + hitFar * dir.x, from.y + hitFar * dir.y),\n timeOfCollision: hitNear\n };\n}\n// a dynamic rect is one that can move - has a velocity\n// static rect doesn't move\nfunction dynamicRectVsStaticRect(dynamicRect, staticRect) {\n // assume no collision if the dynamic rect is not moving\n // avoiding using length here because it calculates a square root\n if (dynamicRect.velocity.x === 0 && dynamicRect.velocity.y === 0) {\n return false;\n }\n var halfWidth = dynamicRect.width / 2;\n var halfHeight = dynamicRect.height / 2;\n var clone = bramble_1.vec2.clone(dynamicRect.position);\n clone.add(dynamicRect.velocity);\n clone.x += dynamicRect.width / 2;\n clone.y += dynamicRect.height / 2;\n var line = {\n from: {\n x: dynamicRect.position.x + halfWidth,\n y: dynamicRect.position.y + halfHeight\n },\n to: clone\n };\n var rect = {\n x: staticRect.position.x - halfWidth,\n y: staticRect.position.y - halfHeight,\n width: staticRect.width + dynamicRect.width,\n height: staticRect.height + dynamicRect.height\n };\n return lineVsRect(line, rect);\n}\n// Compute the value of a point on a cubic Bezier curve at parameter t\nfunction cubicBezierPoint(P0, P1, P2, P3, t) {\n var x = (1 - t) * (1 - t) * (1 - t) * P0.x +\n 3 * (1 - t) * (1 - t) * t * P1.x +\n 3 * (1 - t) * t * t * P2.x +\n t * t * t * P3.x;\n var y = (1 - t) * (1 - t) * (1 - t) * P0.y +\n 3 * (1 - t) * (1 - t) * t * P1.y +\n 3 * (1 - t) * t * t * P2.y +\n t * t * t * P3.y;\n return bramble_1.vec2.create(x, y);\n}\n// Compute the tangent of the curve at parameter t\nfunction cubicBezierTangent(P0, P1, P2, P3, t) {\n var x = 3 * (1 - t) * (1 - t) * (P1.x - P0.x) +\n 6 * (1 - t) * t * (P2.x - P1.x) +\n 3 * t * t * (P3.x - P2.x);\n var y = 3 * (1 - t) * (1 - t) * (P1.y - P0.y) +\n 6 * (1 - t) * t * (P2.y - P1.y) +\n 3 * t * t * (P3.y - P2.y);\n return bramble_1.vec2.create(x, y);\n}\n// Helper function to find the roots of a cubic polynomial using Cardano's formula\nfunction findCubicRoots(A, B, C, D) {\n if (Math.abs(A) < 1e-10) {\n return findQuadraticRoots(B, C, D);\n }\n var a = B / A;\n var b = C / A;\n var c = D / A;\n var p = (3 * b - a * a) / 3;\n var q = (2 * a * a * a - 9 * a * b + 27 * c) / 27;\n var discriminant = (q * q) / 4 + (p * p * p) / 27;\n var roots = [];\n if (discriminant > 0) {\n var u = Math.cbrt(-q / 2 + Math.sqrt(discriminant));\n var v = Math.cbrt(-q / 2 - Math.sqrt(discriminant));\n roots.push(u + v - a / 3);\n }\n else if (discriminant === 0) {\n var u = Math.cbrt(-q / 2);\n roots.push(2 * u - a / 3);\n roots.push(-u - a / 3);\n }\n else {\n var r = Math.sqrt((-p * p * p) / 27);\n var phi = Math.acos(-q / (2 * r));\n roots.push(2 * Math.cbrt(r) * Math.cos(phi / 3) - a / 3);\n roots.push(2 * Math.cbrt(r) * Math.cos((phi + 2 * Math.PI) / 3) - a / 3);\n roots.push(2 * Math.cbrt(r) * Math.cos((phi + 4 * Math.PI) / 3) - a / 3);\n }\n return roots.filter(function (t) { return t >= 0 && t <= 1; });\n}\n// Helper function to find the roots of a quadratic polynomial\nfunction findQuadraticRoots(A, B, C) {\n var discriminant = B * B - 4 * A * C;\n if (discriminant < 0) {\n return [];\n }\n else if (discriminant === 0) {\n return [-B / (2 * A)];\n }\n else {\n var sqrtDiscriminant = Math.sqrt(discriminant);\n return [\n (-B + sqrtDiscriminant) / (2 * A),\n (-B - sqrtDiscriminant) / (2 * A)\n ];\n }\n}\n// Find intersection between a ray (defined by two points) and a cubic Bezier curve\nfunction lineVsCubicBezierCurve(P0, P1, P2, P3, R0, R1) {\n var intersections = [];\n // Coefficients of the cubic Bezier curve\n var ax = -P0.x + 3 * P1.x - 3 * P2.x + P3.x;\n var ay = -P0.y + 3 * P1.y - 3 * P2.y + P3.y;\n var bx = 3 * P0.x - 6 * P1.x + 3 * P2.x;\n var by = 3 * P0.y - 6 * P1.y + 3 * P2.y;\n var cx = -3 * P0.x + 3 * P1.x;\n var cy = -3 * P0.y + 3 * P1.y;\n var dx = P0.x;\n var dy = P0.y;\n // Coefficients of the ray\n var rx = R1.x - R0.x;\n var ry = R1.y - R0.y;\n var ex = R0.x;\n var ey = R0.y;\n // Construct the cubic equation: At^3 + Bt^2 + Ct + D = 0\n var A = ax * ry - ay * rx;\n var B = bx * ry - by * rx;\n var C = cx * ry - cy * rx;\n var D = (dx - ex) * ry - (dy - ey) * rx;\n var roots = findCubicRoots(A, B, C, D);\n // Check valid t values and compute intersections\n roots.forEach(function (t) {\n var intersection = cubicBezierPoint(P0, P1, P2, P3, t);\n var tangent = cubicBezierTangent(P0, P1, P2, P3, t);\n var angleRadians = Math.atan2(tangent.y, tangent.x);\n var angleDegrees = angleRadians * (180 / Math.PI);\n var tempvec = bramble_1.vec2.fromDegrees(angleDegrees);\n var normal = bramble_1.vec2.create(tempvec.y, -tempvec.x);\n // Calculate the distance along the ray\n var dx = intersection.x - R0.x;\n var dy = intersection.y - R0.y;\n var distanceToIntersection = Math.sqrt(dx * dx + dy * dy);\n var rayLength = Math.sqrt(rx * rx + ry * ry);\n var remainderLength = rayLength - distanceToIntersection;\n // Ensure the intersection point lies within the ray segment\n var rayParam = (intersection.x - ex) / rx;\n var rayParamY = (intersection.y - ey) / ry;\n if ((rayParam >= 0 && rayParam <= 1) ||\n (rayParamY >= 0 && rayParamY <= 1)) {\n intersections.push({\n point: bramble_1.vec2.create(intersection.x, intersection.y),\n distance: distanceToIntersection,\n remainderLength: remainderLength,\n angleRadians: angleRadians,\n angleDegrees: angleDegrees,\n direction: bramble_1.vec2.fromDegrees(angleDegrees),\n normal: normal\n });\n }\n });\n return intersections;\n}\nexports.default = {\n dynamicRectVsStaticRect: dynamicRectVsStaticRect,\n rectVsRect: rectVsRect,\n lineVsRect: lineVsRect,\n pointVsRect: pointVsRect,\n lineVsCubicBezierCurve: lineVsCubicBezierCurve\n};\n\n\n/***/ }),\n\n/***/ \"./src/game.ts\":\n/*!*********************!*\\\n !*** ./src/game.ts ***!\n \\*********************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_24766__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar assets_1 = __nested_webpack_require_24766__(/*! ./assets */ \"./src/assets.ts\");\nvar graphics_1 = __nested_webpack_require_24766__(/*! ./graphics */ \"./src/graphics.ts\");\nvar input_1 = __nested_webpack_require_24766__(/*! ./input */ \"./src/input.ts\");\nvar renderer_1 = __nested_webpack_require_24766__(/*! ./renderer */ \"./src/renderer.ts\");\nvar sounds_1 = __nested_webpack_require_24766__(/*! ./sounds */ \"./src/sounds.ts\");\nvar create = function () {\n var backgroundColor = null;\n var update = null;\n var render = null;\n // used for calculating the Delta Time for the Frame\n var prevTime = 0;\n var canvas = document.createElement('canvas');\n var graphicsContext = canvas.getContext('2d');\n var audioContext = new AudioContext();\n var gfx = graphics_1.default.create(graphicsContext);\n var sfx = sounds_1.default.create(audioContext);\n var assetManager = assets_1.default.create();\n var ren = renderer_1.default.create(graphicsContext);\n canvas.id = 'bramble-game';\n var mouseInput = input_1.mouse.create(canvas);\n var keyboardInput = input_1.keyboard.create(canvas);\n var setBackgroundColor = function (color) {\n backgroundColor = color;\n };\n var attachTo = function (element) {\n element.appendChild(canvas);\n };\n var setUpdate = function (callback) {\n update = callback;\n };\n var setRender = function (callback) {\n render = callback;\n };\n var inputState = {\n keyboard: keyboardInput.getState(),\n mouse: mouseInput.getState(),\n };\n var step = function () {\n if (update) {\n inputState.keyboard = keyboardInput.getState();\n inputState.mouse = mouseInput.getState();\n update({\n dt: (performance.now() - prevTime) / 1000,\n input: inputState,\n sfx: sfx,\n assets: assetManager.assets\n });\n }\n if (render) {\n if (backgroundColor) {\n gfx.clear(backgroundColor);\n }\n render({ gfx: ren, assets: assetManager.assets });\n ren.render();\n }\n mouseInput.update();\n keyboardInput.update();\n window.requestAnimationFrame(step);\n prevTime = performance.now();\n };\n var start = function () {\n mouseInput.start();\n keyboardInput.start();\n window.requestAnimationFrame(step);\n };\n var setSize = function (width, height) {\n canvas.width = width;\n canvas.height = height;\n };\n // Smoothing must be re-applied if any of the following is called\n // - setSize\n var setSmoothing = function (to) {\n if (to === void 0) { to = true; }\n graphicsContext.imageSmoothingEnabled = to;\n };\n var disableContextMenu = function () {\n canvas.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n };\n var stop = function () {\n canvas.remove();\n };\n return {\n attachTo: attachTo,\n setSize: setSize,\n setUpdate: setUpdate,\n setRender: setRender,\n setBackgroundColor: setBackgroundColor,\n canvas: canvas,\n disableContextMenu: disableContextMenu,\n setSmoothing: setSmoothing,\n start: start,\n stop: stop,\n assets: assetManager\n };\n};\nexports.default = {\n create: create\n};\n\n\n/***/ }),\n\n/***/ \"./src/graphics.ts\":\n/*!*************************!*\\\n !*** ./src/graphics.ts ***!\n \\*************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_28398__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar clear_1 = __nested_webpack_require_28398__(/*! ./graphics/clear */ \"./src/graphics/clear.ts\");\nvar defaults_1 = __nested_webpack_require_28398__(/*! ./graphics/defaults */ \"./src/graphics/defaults.ts\");\nvar effects_1 = __nested_webpack_require_28398__(/*! ./graphics/effects */ \"./src/graphics/effects.ts\");\nvar images_1 = __nested_webpack_require_28398__(/*! ./graphics/images */ \"./src/graphics/images.ts\");\nvar shapes_1 = __nested_webpack_require_28398__(/*! ./graphics/shapes */ \"./src/graphics/shapes.ts\");\nvar text_1 = __nested_webpack_require_28398__(/*! ./graphics/text */ \"./src/graphics/text.ts\");\nvar tiles_1 = __nested_webpack_require_28398__(/*! ./graphics/tiles */ \"./src/graphics/tiles.ts\");\nvar transforms_1 = __nested_webpack_require_28398__(/*! ./graphics/transforms */ \"./src/graphics/transforms.ts\");\nvar sprites_1 = __nested_webpack_require_28398__(/*! ./graphics/sprites */ \"./src/graphics/sprites.ts\");\nvar clear_2 = __nested_webpack_require_28398__(/*! ./graphics/clear */ \"./src/graphics/clear.ts\");\nfunction create(ctx) {\n return {\n circle: function (position, radius, options) {\n if (options === void 0) { options = defaults_1.defaultCircle; }\n (0, shapes_1.circle)(ctx, position, radius, options);\n },\n clear: function (colour) {\n (0, clear_2.clear)(ctx, colour);\n },\n clearRect: function (rectangle, colour) {\n (0, clear_1.clearRect)(ctx, rectangle, colour);\n },\n curve: function (from, to, controlPoints, options) {\n (0, shapes_1.curve)(ctx, from, to, controlPoints, options);\n },\n square: function (position, size, options) {\n if (options === void 0) { options = defaults_1.defaultRect; }\n (0, shapes_1.square)(ctx, position, size, options);\n },\n rect: function (rectangle, options) {\n if (options === void 0) { options = defaults_1.defaultRect; }\n (0, shapes_1.rect)(ctx, rectangle, options);\n },\n image: function (img, position, size) {\n (0, images_1.image)(ctx, img, position, size);\n },\n line: function (from, to, options) {\n if (options === void 0) { options = defaults_1.defaultLine; }\n (0, shapes_1.line)(ctx, from, to, options);\n },\n sprite: function (spr) {\n (0, sprites_1.sprite)(ctx, spr);\n },\n subImage: function (img, position, size, subPosition, subSize) {\n (0, images_1.subImage)(ctx, img, position, size, subPosition, subSize);\n },\n text: function (position, text, options) {\n if (position === void 0) { position = { x: 0, y: 0 }; }\n if (text === void 0) { text = ''; }\n if (options === void 0) { options = defaults_1.defaultText; }\n (0, text_1.txt)(ctx, position, text, options);\n },\n tiles: function (position, tileGrid, spriteSheets, scale) {\n (0, tiles_1.tiles)(ctx, position, tileGrid, spriteSheets, scale);\n },\n shadow: function (drawingOperations, options) {\n if (options === void 0) { options = defaults_1.defaultDropShadow; }\n (0, effects_1.shadow)(ctx, drawingOperations, options);\n },\n dodge: function (drawingOperations) {\n (0, effects_1.dodge)(ctx, drawingOperations);\n },\n overlay: function (drawingOperations) {\n (0, effects_1.overlay)(ctx, drawingOperations);\n },\n transparency: function (drawingOperations, alpha) {\n if (alpha === void 0) { alpha = 0.25; }\n (0, effects_1.transparency)(ctx, drawingOperations, alpha);\n },\n rotation: function (drawingOperations, rotateBy, around) {\n if (rotateBy === void 0) { rotateBy = 0; }\n if (around === void 0) { around = { x: 0, y: 0 }; }\n (0, transforms_1.rotation)(ctx, drawingOperations, rotateBy, around);\n },\n transform: function (drawingOperations, options) {\n if (options === void 0) { options = defaults_1.defaultTransform; }\n (0, transforms_1.transform)(ctx, drawingOperations, options);\n },\n scale: function (drawingOperations, options) {\n (0, transforms_1.scale)(ctx, drawingOperations, options);\n },\n multiply: function (drawingOperations) {\n (0, effects_1.multiply)(ctx, drawingOperations);\n },\n screen: function (drawingOperations) {\n (0, effects_1.screen)(ctx, drawingOperations);\n },\n blur: function (drawingOperations, radius) {\n if (radius === void 0) { radius = 4; }\n (0, effects_1.blur)(ctx, drawingOperations, radius);\n },\n colourShift: function (drawingOperations, options) {\n if (options === void 0) { options = effects_1.defaultColourShift; }\n (0, effects_1.colourShift)(ctx, drawingOperations, options);\n },\n strokeGlow: function (drawingOperations, options) {\n if (options === void 0) { options = effects_1.defaultStrokeGlow; }\n (0, effects_1.strokeGlow)(ctx, drawingOperations, options);\n }\n };\n}\nexports.default = {\n circle: shapes_1.circle,\n clear: clear_2.clear,\n clearRect: clear_1.clearRect,\n create: create,\n curve: shapes_1.curve,\n dodge: effects_1.dodge,\n image: images_1.image,\n line: shapes_1.line,\n overlay: effects_1.overlay,\n rotation: transforms_1.rotation,\n rect: shapes_1.rect,\n shadow: effects_1.shadow,\n sprite: sprites_1.sprite,\n square: shapes_1.square,\n subImage: images_1.subImage,\n text: text_1.txt,\n tiles: tiles_1.tiles,\n transparency: effects_1.transparency,\n transform: transforms_1.transform,\n multiply: effects_1.multiply,\n screen: effects_1.screen,\n blur: effects_1.blur,\n colourShift: effects_1.colourShift,\n strokeGlow: effects_1.strokeGlow\n};\n\n\n/***/ }),\n\n/***/ \"./src/graphics/clear.ts\":\n/*!*******************************!*\\\n !*** ./src/graphics/clear.ts ***!\n \\*******************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_34544__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clearRect = exports.clear = void 0;\nvar shapes_1 = __nested_webpack_require_34544__(/*! ./shapes */ \"./src/graphics/shapes.ts\");\nfunction clear(ctx, colour) {\n if (!colour) {\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n else {\n (0, shapes_1.rect)(ctx, { x: 0, y: 0, width: ctx.canvas.width, height: ctx.canvas.height }, {\n fill: { colour: colour },\n line: { width: 0 }\n });\n }\n}\nexports.clear = clear;\nfunction clearRect(ctx, rectangle, colour) {\n if (!colour) {\n ctx.clearRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n }\n else {\n (0, shapes_1.rect)(ctx, rectangle, {\n fill: { colour: colour },\n line: { width: 0 }\n });\n }\n}\nexports.clearRect = clearRect;\n\n\n/***/ }),\n\n/***/ \"./src/graphics/common.ts\":\n/*!********************************!*\\\n !*** ./src/graphics/common.ts ***!\n \\********************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.freshContext = void 0;\nfunction freshContext(ctx, callback) {\n ctx.save();\n callback();\n ctx.restore();\n}\nexports.freshContext = freshContext;\n\n\n/***/ }),\n\n/***/ \"./src/graphics/defaults.ts\":\n/*!**********************************!*\\\n !*** ./src/graphics/defaults.ts ***!\n \\**********************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultTransform = exports.defaultText = exports.defaultCircle = exports.defaultLine = exports.defaultRect = exports.defaultDropShadow = void 0;\nexports.defaultDropShadow = {\n shadowColour: '#000000',\n shadowBlur: 6,\n shadowOffsetX: 4,\n shadowOffsetY: 4\n};\nexports.defaultRect = {\n fill: {\n colour: '#000000',\n opacity: 1\n },\n line: {\n width: 1,\n colour: '#FFFFFF',\n opacity: 1\n }\n};\nexports.defaultLine = {\n width: 1,\n colour: '#FFFFFF',\n opacity: 1\n};\nexports.defaultCircle = {\n fill: {\n colour: '#000000',\n opacity: 1\n },\n line: {\n colour: '#FFFFFF',\n opacity: 1,\n width: 1\n }\n};\nexports.defaultText = {\n colour: '#000000',\n size: '16pt',\n family: 'sans-serif',\n align: 'left',\n baseline: 'top'\n};\nexports.defaultTransform = {\n rotation: 0,\n scale: 1,\n around: { x: 0, y: 0 }\n};\n\n\n/***/ }),\n\n/***/ \"./src/graphics/effects.ts\":\n/*!*********************************!*\\\n !*** ./src/graphics/effects.ts ***!\n \\*********************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_37423__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.strokeGlow = exports.defaultStrokeGlow = exports.colourShift = exports.defaultColourShift = exports.blur = exports.screen = exports.multiply = exports.transparency = exports.overlay = exports.dodge = exports.shadow = void 0;\nvar object_1 = __nested_webpack_require_37423__(/*! ../utils/object */ \"./src/utils/object.ts\");\nvar common_1 = __nested_webpack_require_37423__(/*! ./common */ \"./src/graphics/common.ts\");\nvar defaults_1 = __nested_webpack_require_37423__(/*! ./defaults */ \"./src/graphics/defaults.ts\");\nfunction shadow(ctx, drawingOperations, options) {\n if (options === void 0) { options = defaults_1.defaultDropShadow; }\n (0, common_1.freshContext)(ctx, function () {\n options = (0, object_1.merge)(defaults_1.defaultDropShadow, options);\n ctx.shadowColor = options.shadowColour;\n ctx.shadowBlur = options.shadowBlur;\n ctx.shadowOffsetX = options.shadowOffsetX;\n ctx.shadowOffsetY = options.shadowOffsetY;\n drawingOperations();\n });\n}\nexports.shadow = shadow;\nfunction dodge(ctx, drawingOperations) {\n (0, common_1.freshContext)(ctx, function () {\n ctx.globalCompositeOperation = 'color-dodge';\n drawingOperations();\n });\n}\nexports.dodge = dodge;\nfunction overlay(ctx, drawingOperations) {\n (0, common_1.freshContext)(ctx, function () {\n ctx.globalCompositeOperation = 'overlay';\n drawingOperations();\n });\n}\nexports.overlay = overlay;\nfunction transparency(ctx, drawingOperations, alpha) {\n if (alpha === void 0) { alpha = 0.25; }\n (0, common_1.freshContext)(ctx, function () {\n ctx.globalAlpha *= alpha;\n drawingOperations();\n });\n}\nexports.transparency = transparency;\nfunction multiply(ctx, drawingOperations) {\n (0, common_1.freshContext)(ctx, function () {\n ctx.globalCompositeOperation = 'multiply';\n drawingOperations();\n });\n}\nexports.multiply = multiply;\nfunction screen(ctx, drawingOperations) {\n (0, common_1.freshContext)(ctx, function () {\n ctx.globalCompositeOperation = 'screen';\n drawingOperations();\n });\n}\nexports.screen = screen;\nfunction blur(ctx, drawingOperations, radius // default blur radius in px\n) {\n if (radius === void 0) { radius = 4; }\n // freshContext(ctx, () => {\n ctx.filter = \"blur(\".concat(radius, \"px)\");\n drawingOperations();\n // })\n}\nexports.blur = blur;\nexports.defaultColourShift = {\n hue: 0,\n saturate: 1\n};\nfunction colourShift(ctx, drawingOperations, options) {\n if (options === void 0) { options = exports.defaultColourShift; }\n (0, common_1.freshContext)(ctx, function () {\n var hue = options.hue, saturate = options.saturate;\n ctx.filter = \"hue-rotate(\".concat(hue, \"deg) saturate(\").concat(saturate, \")\");\n drawingOperations();\n });\n}\nexports.colourShift = colourShift;\nexports.defaultStrokeGlow = {\n color: 'white',\n blur: 8\n};\nfunction strokeGlow(ctx, drawingOperations, options) {\n if (options === void 0) { options = exports.defaultStrokeGlow; }\n (0, common_1.freshContext)(ctx, function () {\n var _a, _b;\n ctx.shadowColor = (_a = options.color) !== null && _a !== void 0 ? _a : 'white';\n ctx.shadowBlur = (_b = options.blur) !== null && _b !== void 0 ? _b : 8;\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n drawingOperations();\n });\n}\nexports.strokeGlow = strokeGlow;\n\n\n/***/ }),\n\n/***/ \"./src/graphics/images.ts\":\n/*!********************************!*\\\n !*** ./src/graphics/images.ts ***!\n \\********************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subImage = exports.image = void 0;\nfunction image(ctx, image, position, size) {\n if (size) {\n ctx.drawImage(image, position.x, position.y, size.width, size.height);\n }\n else {\n ctx.drawImage(image, position.x, position.y, image.width, image.height);\n }\n}\nexports.image = image;\nfunction subImage(ctx, image, position, size, subPosition, subSize) {\n ctx.drawImage(image, subPosition.x, subPosition.y, subSize.width, subSize.height, position.x, position.y, size.width, size.height);\n}\nexports.subImage = subImage;\n\n\n/***/ }),\n\n/***/ \"./src/graphics/shape_utils.ts\":\n/*!*************************************!*\\\n !*** ./src/graphics/shape_utils.ts ***!\n \\*************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldSinglePass = exports.shouldDrawFill = exports.shouldDrawOutline = exports.shouldDrawLine = void 0;\nfunction shouldDrawLine(options) {\n return options.opacity !== 0 && options.width !== 0;\n}\nexports.shouldDrawLine = shouldDrawLine;\nfunction shouldDrawOutline(options) {\n return options.line.opacity !== 0 && options.line.width !== 0;\n}\nexports.shouldDrawOutline = shouldDrawOutline;\nfunction shouldDrawFill(options) {\n return options.fill.opacity !== 0;\n}\nexports.shouldDrawFill = shouldDrawFill;\nfunction shouldSinglePass(options) {\n return options.fill.opacity === 1 && options.line.opacity === 1 && options.line.width > 0;\n}\nexports.shouldSinglePass = shouldSinglePass;\n\n\n/***/ }),\n\n/***/ \"./src/graphics/shapes.ts\":\n/*!********************************!*\\\n !*** ./src/graphics/shapes.ts ***!\n \\********************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_43037__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.path = exports.circle = exports.curve = exports.quadratic = exports.bezier = exports.line = exports.rect = exports.square = void 0;\nvar object_1 = __nested_webpack_require_43037__(/*! ../utils/object */ \"./src/utils/object.ts\");\nvar defaults_1 = __nested_webpack_require_43037__(/*! ./defaults */ \"./src/graphics/defaults.ts\");\nvar effects_1 = __nested_webpack_require_43037__(/*! ./effects */ \"./src/graphics/effects.ts\");\nvar shape_utils_1 = __nested_webpack_require_43037__(/*! ./shape_utils */ \"./src/graphics/shape_utils.ts\");\nfunction square(ctx, position, size, options) {\n if (options === void 0) { options = defaults_1.defaultRect; }\n rect(ctx, { x: position.x, y: position.y, width: size, height: size }, options);\n}\nexports.square = square;\nfunction rectOutline(ctx, rectangle, options) {\n ctx.strokeStyle = options.line.colour;\n ctx.lineWidth = options.line.width;\n ctx.strokeRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n}\nfunction rectFill(ctx, rectangle, options) {\n ctx.fillStyle = options.fill.colour;\n ctx.fillRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n}\nfunction rectCombined(ctx, rectangle, options) {\n ctx.fillStyle = options.fill.colour;\n ctx.strokeStyle = options.line.colour;\n ctx.lineWidth = options.line.width;\n ctx.fillRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n ctx.strokeRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n}\nfunction rect(ctx, rectangle, options) {\n if (options === void 0) { options = defaults_1.defaultRect; }\n options = (0, object_1.merge)(defaults_1.defaultRect, options);\n if ((0, shape_utils_1.shouldSinglePass)(options)) {\n rectCombined(ctx, rectangle, options);\n }\n else {\n if ((0, shape_utils_1.shouldDrawFill)(options)) {\n (0, effects_1.transparency)(ctx, function () { return rectFill(ctx, rectangle, options); }, options.fill.opacity);\n }\n if ((0, shape_utils_1.shouldDrawOutline)(options)) {\n (0, effects_1.transparency)(ctx, function () { return rectOutline(ctx, rectangle, options); }, options.line.opacity);\n }\n }\n}\nexports.rect = rect;\nfunction line(ctx, from, to, options) {\n if (options === void 0) { options = defaults_1.defaultLine; }\n options = (0, object_1.merge)(defaults_1.defaultLine, options);\n if ((0, shape_utils_1.shouldDrawLine)(options)) {\n (0, effects_1.transparency)(ctx, function () {\n ctx.strokeStyle = options.colour;\n ctx.lineWidth = options.width;\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n ctx.stroke();\n ctx.closePath();\n }, options.opacity);\n }\n}\nexports.line = line;\nfunction bezier(ctx, from, to, cp1, cp2, options) {\n if (options === void 0) { options = defaults_1.defaultLine; }\n options = (0, object_1.merge)(defaults_1.defaultLine, options);\n if ((0, shape_utils_1.shouldDrawLine)(options)) {\n (0, effects_1.transparency)(ctx, function () {\n ctx.strokeStyle = options.colour;\n ctx.lineWidth = options.width;\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.bezierCurveTo(cp1.x, cp1.y, cp2.x, cp2.y, to.x, to.y);\n ctx.stroke();\n ctx.closePath();\n }, options.opacity);\n }\n}\nexports.bezier = bezier;\nfunction quadratic(ctx, from, to, cp, options) {\n if (options === void 0) { options = defaults_1.defaultLine; }\n options = (0, object_1.merge)(defaults_1.defaultLine, options);\n if ((0, shape_utils_1.shouldDrawLine)(options)) {\n (0, effects_1.transparency)(ctx, function () {\n ctx.strokeStyle = options.colour;\n ctx.lineWidth = options.width;\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.quadraticCurveTo(cp.x, cp.y, to.x, to.y);\n ctx.stroke();\n ctx.closePath();\n });\n }\n}\nexports.quadratic = quadratic;\nfunction curve(ctx, from, to, controlPoints, options) {\n if (options === void 0) { options = defaults_1.defaultLine; }\n if (controlPoints.cp1 && controlPoints.cp2) {\n bezier(ctx, from, to, controlPoints.cp1, controlPoints.cp2, options);\n }\n else if (controlPoints.cp1 && !controlPoints.cp2) {\n quadratic(ctx, from, to, controlPoints.cp1, options);\n }\n else {\n line(ctx, from, to, options);\n }\n}\nexports.curve = curve;\nfunction circleOutline(ctx, position, radius, options) {\n ctx.strokeStyle = options.line.colour;\n ctx.lineWidth = options.line.width;\n ctx.beginPath();\n ctx.arc(position.x, position.y, radius, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.stroke();\n}\nfunction circleFill(ctx, position, radius, options) {\n ctx.fillStyle = options.fill.colour;\n ctx.beginPath();\n ctx.arc(position.x, position.y, radius, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n}\nfunction circleCombined(ctx, position, radius, options) {\n ctx.fillStyle = options.fill.colour;\n ctx.strokeStyle = options.line.colour;\n ctx.lineWidth = options.line.width;\n ctx.beginPath();\n ctx.arc(position.x, position.y, radius, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n ctx.stroke();\n}\nfunction circle(ctx, position, radius, options) {\n if (options === void 0) { options = defaults_1.defaultCircle; }\n options = (0, object_1.merge)(defaults_1.defaultCircle, options);\n if ((0, shape_utils_1.shouldSinglePass)(options)) {\n circleCombined(ctx, position, radius, options);\n }\n else {\n if ((0, shape_utils_1.shouldDrawFill)(options)) {\n (0, effects_1.transparency)(ctx, function () { return circleFill(ctx, position, radius, options); }, options.fill.opacity);\n }\n if ((0, shape_utils_1.shouldDrawOutline)(options)) {\n (0, effects_1.transparency)(ctx, function () { return circleOutline(ctx, position, radius, options); }, options.line.opacity);\n }\n }\n}\nexports.circle = circle;\nfunction path(ctx, operations, options) {\n if (options === void 0) { options = defaults_1.defaultLine; }\n options = (0, object_1.merge)(defaults_1.defaultLine, options);\n if ((0, shape_utils_1.shouldDrawLine)(options)) {\n (0, effects_1.transparency)(ctx, function () {\n ctx.globalAlpha = options.opacity;\n ctx.strokeStyle = options.colour;\n ctx.lineWidth = options.width;\n ctx.beginPath();\n operations();\n ctx.stroke();\n }, options.opacity);\n }\n}\nexports.path = path;\n\n\n/***/ }),\n\n/***/ \"./src/graphics/sprites.ts\":\n/*!*********************************!*\\\n !*** ./src/graphics/sprites.ts ***!\n \\*********************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_49946__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sprite = void 0;\nvar number_1 = __nested_webpack_require_49946__(/*! ../utils/number */ \"./src/utils/number.ts\");\nvar common_1 = __nested_webpack_require_49946__(/*! ./common */ \"./src/graphics/common.ts\");\nvar images_1 = __nested_webpack_require_49946__(/*! ./images */ \"./src/graphics/images.ts\");\nfunction sprite(ctx, sprite) {\n (0, common_1.freshContext)(ctx, function () {\n var halfWidth = sprite.size.width / 2;\n var halfHeight = sprite.size.height / 2;\n ctx.translate(sprite.position.x + halfWidth, sprite.position.y + halfHeight);\n ctx.rotate(number_1.default.toRadians(sprite.rotation));\n if (sprite.frames.length > 1) {\n (0, images_1.subImage)(ctx, sprite.texture, {\n x: -halfWidth,\n y: -halfHeight\n }, {\n width: sprite.size.width,\n height: sprite.size.height\n }, {\n x: sprite.frames[sprite.frame].position.x,\n y: sprite.frames[sprite.frame].position.y\n }, {\n width: sprite.frames[sprite.frame].size.width,\n height: sprite.frames[sprite.frame].size.height\n });\n }\n else {\n (0, images_1.image)(ctx, sprite.texture, {\n x: -halfWidth,\n y: -halfHeight\n }, {\n width: sprite.size.width,\n height: sprite.size.height\n });\n }\n });\n}\nexports.sprite = sprite;\n\n\n/***/ }),\n\n/***/ \"./src/graphics/text.ts\":\n/*!******************************!*\\\n !*** ./src/graphics/text.ts ***!\n \\******************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_51722__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.txt = void 0;\nvar object_1 = __nested_webpack_require_51722__(/*! ../utils/object */ \"./src/utils/object.ts\");\nvar common_1 = __nested_webpack_require_51722__(/*! ./common */ \"./src/graphics/common.ts\");\nvar defaults_1 = __nested_webpack_require_51722__(/*! ./defaults */ \"./src/graphics/defaults.ts\");\nfunction txt(ctx, position, text, options) {\n if (text === void 0) { text = ''; }\n if (options === void 0) { options = defaults_1.defaultText; }\n (0, common_1.freshContext)(ctx, function () {\n options = (0, object_1.merge)(defaults_1.defaultText, options);\n ctx.fillStyle = options.colour;\n ctx.font = \"\".concat(options.size, \" \").concat(options.family);\n ctx.textAlign = options.align;\n ctx.textBaseline = options.baseline;\n ctx.fillText(text, position.x, position.y);\n });\n}\nexports.txt = txt;\n\n\n/***/ }),\n\n/***/ \"./src/graphics/tiles.ts\":\n/*!*******************************!*\\\n !*** ./src/graphics/tiles.ts ***!\n \\*******************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_52866__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tiles = exports.tile = void 0;\nvar images_1 = __nested_webpack_require_52866__(/*! ./images */ \"./src/graphics/images.ts\");\nfunction tile(ctx, position, tilesheet, gridPosition, tilesheetPosition, scale, tileSize) {\n (0, images_1.subImage)(ctx, tilesheet, {\n x: position.x + scale * (gridPosition.x * tileSize.width),\n y: position.y + scale * (gridPosition.y * tileSize.height)\n }, {\n width: scale * tileSize.width,\n height: scale * tileSize.height\n }, {\n x: tileSize.width * tilesheetPosition.x,\n y: tileSize.height * tilesheetPosition.y\n }, {\n width: tileSize.width,\n height: tileSize.height\n });\n}\nexports.tile = tile;\n// tilegrid: a 2d array of numbers representing terrain types\n// spritesheets: An object, each key is the value that represents a tile from this sheet\nfunction tiles(ctx, position, tileGrid, spriteSheets, scale) {\n var dirValues = {\n NW: 1,\n N: 2,\n NE: 4,\n E: 8,\n SE: 16,\n S: 32,\n SW: 64,\n W: 128\n };\n var _loop_1 = function (y) {\n var _loop_2 = function (x) {\n if (tileGrid[y][x] === 0) {\n return \"continue\";\n }\n // REAL VALUES\n var tl = y > 0 ? tileGrid[y - 1][x - 1] : 0;\n var tm = y > 0 ? tileGrid[y - 1][x] : 0;\n var tr = y > 0 ? tileGrid[y - 1][x + 1] : 0;\n var ml = tileGrid[y][x - 1];\n var m = tileGrid[y][x];\n var mr = tileGrid[y][x + 1];\n var bl = y < tileGrid.length - 1 ? tileGrid[y + 1][x - 1] : 0;\n var bm = y < tileGrid.length - 1 ? tileGrid[y + 1][x] : 0;\n var br = y < tileGrid.length - 1 ? tileGrid[y + 1][x + 1] : 0;\n // BINARY VALUES\n var n = m === tm ? 1 : 0;\n var e = m === mr ? 1 : 0;\n var s = m === bm ? 1 : 0;\n var w = m === ml ? 1 : 0;\n var nw = m === tm && m === ml ? (m === tl ? 1 : 0) : 0;\n var ne = m === tm && m === mr ? (m === tr ? 1 : 0) : 0;\n var sw = m === bm && m === ml ? (m === bl ? 1 : 0) : 0;\n var se = m === bm && m === mr ? (m === br ? 1 : 0) : 0;\n var sum = dirValues.NW * nw +\n dirValues.N * n +\n dirValues.NE * ne +\n dirValues.E * e +\n dirValues.SE * se +\n dirValues.S * s +\n dirValues.SW * sw +\n dirValues.W * w;\n // Figure out which sheet we're supposed to be drawing from\n var sheet = spriteSheets.filter(function (sheet) {\n return sheet.type === tileGrid[y][x];\n })[0];\n if (!sheet) {\n console.error(\"Sheet \".concat(tileGrid[y][x], \" not found!\"));\n return { value: void 0 };\n }\n var selections = sheet.tiles.filter(function (x) { return x.type === sum; });\n // Note: Just picking a random one of the variants every time we render for now\n var selection = selections[Math.floor(Math.random() * selections.length)];\n if (selection) {\n tile(ctx, position, sheet.image, { x: x, y: y }, selection.position, scale, selection.size);\n }\n else {\n console.error(\"Tile not defined \".concat(sum));\n }\n };\n for (var x = 0; x < tileGrid[y].length; x++) {\n var state_2 = _loop_2(x);\n if (typeof state_2 === \"object\")\n return state_2;\n }\n };\n for (var y = 0; y < tileGrid.length; y++) {\n var state_1 = _loop_1(y);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n}\nexports.tiles = tiles;\n\n\n/***/ }),\n\n/***/ \"./src/graphics/transforms.ts\":\n/*!************************************!*\\\n !*** ./src/graphics/transforms.ts ***!\n \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_56962__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.transform = exports.scale = exports.rotation = void 0;\nvar number_1 = __nested_webpack_require_56962__(/*! ../utils/number */ \"./src/utils/number.ts\");\nvar object_1 = __nested_webpack_require_56962__(/*! ../utils/object */ \"./src/utils/object.ts\");\nvar common_1 = __nested_webpack_require_56962__(/*! ./common */ \"./src/graphics/common.ts\");\nvar defaults_1 = __nested_webpack_require_56962__(/*! ./defaults */ \"./src/graphics/defaults.ts\");\nfunction rotation(ctx, drawingOperations, rotation, around) {\n (0, common_1.freshContext)(ctx, function () {\n ctx.translate(around.x, around.y);\n ctx.rotate(number_1.default.toRadians(rotation));\n ctx.translate(-around.x, -around.y);\n drawingOperations();\n });\n}\nexports.rotation = rotation;\nfunction scale(ctx, drawingOperations, factor, around) {\n if (around === void 0) { around = { x: 0, y: 0 }; }\n (0, common_1.freshContext)(ctx, function () {\n ctx.translate(around.x, around.y);\n if (typeof factor === 'number')\n ctx.scale(factor, factor);\n else\n ctx.scale(factor.x, factor.y);\n ctx.translate(-around.x, -around.y);\n drawingOperations();\n });\n}\nexports.scale = scale;\nfunction transform(ctx, drawingOperations, options) {\n if (options === void 0) { options = defaults_1.defaultTransform; }\n options = (0, object_1.merge)(defaults_1.defaultTransform, options);\n scale(ctx, function () {\n rotation(ctx, drawingOperations, options.rotation, options.around);\n }, options.scale, options.around);\n}\nexports.transform = transform;\n\n\n/***/ }),\n\n/***/ \"./src/grid.ts\":\n/*!*********************!*\\\n !*** ./src/grid.ts ***!\n \\*********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction make2DArray(width, height, defaultValue) {\n if (width === void 0) { width = 1; }\n if (height === void 0) { height = 1; }\n if (defaultValue === void 0) { defaultValue = null; }\n var result = [];\n for (var y = 0; y < height; y++) {\n var row = [];\n for (var x = 0; x < width; x++) {\n row.push(defaultValue);\n }\n result.push(row);\n }\n return result;\n}\nfunction copyTiles(tiles) {\n return tiles.map(function (arr) { return arr.slice(); });\n}\nvar defaultGrid = {\n pos: { x: 0, y: 0 },\n visible: true,\n divisions: 4,\n tileWidth: 8,\n tileHeight: 8,\n scale: 1\n};\nfunction fill(tiles, position, target, replacement) {\n var gridClone = copyTiles(tiles);\n function floodFill(position, target, replacement) {\n if (target === replacement) {\n return;\n }\n var valueAtPosition = gridClone[position.y][position.x];\n if (valueAtPosition !== target) {\n return;\n }\n var isWithinBounds = position.x < gridClone[position.y].length &&\n position.x >= 0 &&\n position.y < gridClone.length &&\n position.y >= 0;\n if (isWithinBounds) {\n gridClone[position.y][position.x] = replacement;\n if (position.y < gridClone.length - 1) {\n floodFill({ x: position.x, y: position.y + 1 }, target, replacement);\n }\n if (position.y > 0) {\n floodFill({ x: position.x, y: position.y - 1 }, target, replacement);\n }\n if (position.x < gridClone[0].length - 1) {\n floodFill({ x: position.x + 1, y: position.y }, target, replacement);\n }\n if (position.x > 0) {\n floodFill({ x: position.x - 1, y: position.y }, target, replacement);\n }\n }\n return;\n }\n if (true) {\n floodFill(position, target, replacement);\n }\n return gridClone;\n}\nfunction create(size, options) {\n if (options === void 0) { options = defaultGrid; }\n options = __assign(__assign({}, defaultGrid), options);\n var tiles = make2DArray(size.width, size.height, 0);\n var pos = { x: options.pos.x, y: options.pos.y };\n var visible = options.visible;\n var divisions = options.divisions;\n var tileWidth = options.tileWidth;\n var tileHeight = options.tileHeight;\n var tileSize = options.tileWidth;\n var scale = options.scale;\n return {\n divisions: divisions,\n pos: pos,\n tileHeight: tileHeight,\n tiles: tiles,\n tileWidth: tileWidth,\n visible: visible,\n size: size,\n tileSize: tileSize,\n scale: scale\n };\n}\nexports.default = {\n create: create,\n fill: fill,\n copyTiles: copyTiles\n};\n\n\n/***/ }),\n\n/***/ \"./src/input.ts\":\n/*!**********************!*\\\n !*** ./src/input.ts ***!\n \\**********************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_62246__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.gamepad = exports.keyboard = exports.mouse = void 0;\nvar mouse_1 = __nested_webpack_require_62246__(/*! ./input/mouse */ \"./src/input/mouse.ts\");\nvar keyboard_1 = __nested_webpack_require_62246__(/*! ./input/keyboard */ \"./src/input/keyboard.ts\");\nvar gamepad_1 = __nested_webpack_require_62246__(/*! ./input/gamepad */ \"./src/input/gamepad.ts\");\nfunction createMouse(canvas) {\n var mouseInput = mouse_1.default.create(canvas);\n return {\n start: function () { return mouseInput.start(); },\n update: function () { return mouseInput.update(); },\n getState: function () { return mouseInput.getState(); }\n };\n}\nfunction createKeyboard(canvas) {\n var keyboardInput = keyboard_1.default.create(canvas);\n return {\n start: function () { return keyboardInput.start(); },\n update: function () { return keyboardInput.update(); },\n getState: function () { return keyboardInput.getState(); }\n };\n}\nfunction createGamepad() {\n var gamepadInput = gamepad_1.default.create();\n return {\n start: function () { return gamepadInput.start(); },\n update: function () { return gamepadInput.update(); },\n getState: function () { return gamepadInput.getState(); }\n };\n}\nexports.mouse = {\n create: createMouse\n};\nexports.keyboard = {\n create: createKeyboard\n};\nexports.gamepad = {\n create: createGamepad\n};\n\n\n/***/ }),\n\n/***/ \"./src/input/gamepad.ts\":\n/*!******************************!*\\\n !*** ./src/input/gamepad.ts ***!\n \\******************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create() {\n var gamepad = {};\n var connected = function (e) {\n console.info(e.gamepad);\n };\n var disconnected = function (e) {\n console.info(e.gamepad);\n };\n var start = function () {\n window.addEventListener('gamepadconnected', connected);\n window.addEventListener('gamepaddisconnected', disconnected);\n };\n var update = function () { };\n return {\n getState: function () { return gamepad; },\n start: start,\n update: update\n };\n}\nexports.default = { create: create };\n\n\n/***/ }),\n\n/***/ \"./src/input/keyboard.ts\":\n/*!*******************************!*\\\n !*** ./src/input/keyboard.ts ***!\n \\*******************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_64791__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar keys_1 = __nested_webpack_require_64791__(/*! ./keys */ \"./src/input/keys.ts\");\nvar keys = defaultState();\nfunction defaultState() {\n var defaultState = {\n pressed: false,\n justPressed: false,\n released: false,\n justReleased: false\n };\n return keys_1.default.reduce(function (acc, key) {\n var label = key.name;\n delete key['label'];\n acc[label] = __assign(__assign({}, key), defaultState);\n return acc;\n }, {});\n}\nfunction getKey(event, keys) {\n var result = null;\n var objectKeys = Object.keys(keys);\n for (var i = 0; i < objectKeys.length; i++) {\n if (keys[objectKeys[i]].code === event.code) {\n result = keys[objectKeys[i]];\n }\n }\n if (!result) {\n console.error(\"No key definition found for \".concat(event.code));\n }\n return result;\n}\nfunction preventDefaultArrows(event) {\n var keys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', ' '];\n if (keys.includes(event.key)) {\n event.preventDefault();\n }\n}\nfunction down(event) {\n preventDefaultArrows(event);\n var key = getKey(event, keys);\n if (!key.pressed) {\n key.justPressed = true;\n }\n key.pressed = true;\n}\nfunction up(event) {\n var key = getKey(event, keys);\n if (!key.released) {\n key.justReleased = true;\n }\n key.pressed = false;\n key.released = true;\n}\nfunction update() {\n // reset the keys \"just\" properties\n Object.keys(keys).forEach(function (key) {\n keys[key].justPressed = false;\n keys[key].justReleased = false;\n });\n}\nfunction create(canvas) {\n var start = function () {\n // keyboard events\n canvas.addEventListener('keydown', down);\n canvas.addEventListener('keyup', up);\n };\n return {\n start: start,\n update: update,\n getState: function () { return keys; }\n };\n}\nexports.default = { create: create };\n\n\n/***/ }),\n\n/***/ \"./src/input/keys.ts\":\n/*!***************************!*\\\n !*** ./src/input/keys.ts ***!\n \\***************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar allKeys = [\n { code: 'Backspace', name: 'backspace' },\n { code: 'Tab', name: 'tab' },\n { code: 'Enter', name: 'enter' },\n { code: 'ShiftLeft', name: 'shiftLeft' },\n { code: 'ShiftRight', name: 'shiftRight' },\n { code: 'ControlLeft', name: 'ctrlLeft' },\n { code: 'ControlRight', name: 'ctrlRight' },\n { code: 'AltLeft', name: 'altLeft' },\n { code: 'AltRight', name: 'altRight' },\n { code: 'CapsLock', name: 'caps' },\n { code: 'Escape', name: 'escape' },\n { code: 'Space', name: 'space' },\n { code: 'PageUp', name: 'pageUp' },\n { code: 'PageDown', name: 'pageDown' },\n { code: 'End', name: 'end' },\n { code: 'Home', name: 'home' },\n { code: 'ArrowLeft', name: 'left' },\n { code: 'ArrowUp', name: 'up' },\n { code: 'ArrowRight', name: 'right' },\n { code: 'ArrowDown', name: 'down' },\n { code: 'Insert', name: 'insert' },\n { code: 'Delete', name: 'delete' },\n { code: 'Digit0', name: 'zero' },\n { code: 'Digit1', name: 'one' },\n { code: 'Digit2', name: 'two' },\n { code: 'Digit3', name: 'three' },\n { code: 'Digit4', name: 'four' },\n { code: 'Digit5', name: 'five' },\n { code: 'Digit6', name: 'six' },\n { code: 'Digit7', name: 'seven' },\n { code: 'Digit8', name: 'eight' },\n { code: 'Digit9', name: 'nine' },\n { code: 'KeyA', name: 'A' },\n { code: 'KeyB', name: 'B' },\n { code: 'KeyC', name: 'C' },\n { code: 'KeyD', name: 'D' },\n { code: 'KeyE', name: 'E' },\n { code: 'KeyF', name: 'F' },\n { code: 'KeyG', name: 'G' },\n { code: 'KeyH', name: 'H' },\n { code: 'KeyI', name: 'I' },\n { code: 'KeyJ', name: 'J' },\n { code: 'KeyK', name: 'K' },\n { code: 'KeyL', name: 'L' },\n { code: 'KeyM', name: 'M' },\n { code: 'KeyN', name: 'N' },\n { code: 'KeyO', name: 'O' },\n { code: 'KeyP', name: 'P' },\n { code: 'KeyQ', name: 'Q' },\n { code: 'KeyR', name: 'R' },\n { code: 'KeyS', name: 'S' },\n { code: 'KeyT', name: 'T' },\n { code: 'KeyU', name: 'U' },\n { code: 'KeyV', name: 'V' },\n { code: 'KeyW', name: 'W' },\n { code: 'KeyX', name: 'X' },\n { code: 'KeyY', name: 'Y' },\n { code: 'KeyZ', name: 'Z' },\n { code: 'OSLeft', name: 'superLeft' },\n { code: 'OSRight', name: 'superRight' },\n { code: 'ContextMenu', name: 'menu' },\n { code: 'Numpad0', name: 'num0' },\n { code: 'Numpad1', name: 'num1' },\n { code: 'Numpad2', name: 'num2' },\n { code: 'Numpad3', name: 'num3' },\n { code: 'Numpad4', name: 'num4' },\n { code: 'Numpad5', name: 'num5' },\n { code: 'Numpad6', name: 'num6' },\n { code: 'Numpad7', name: 'num7' },\n { code: 'Numpad8', name: 'num8' },\n { code: 'Numpad9', name: 'num9' },\n { code: 'NumpadMultiply', name: 'multiply' },\n { code: 'NumpadAdd', name: 'add' },\n { code: 'NumpadDivide', name: 'divide' },\n { code: 'NumpadDecimal', name: 'point' },\n { code: 'NumpadMinus', name: 'minus' },\n { code: 'NumpadEnter', name: 'numEnter' },\n { code: 'F1', name: 'F1' },\n { code: 'F2', name: 'F2' },\n { code: 'F3', name: 'F3' },\n { code: 'F4', name: 'F4' },\n { code: 'F5', name: 'F5' },\n { code: 'F6', name: 'F6' },\n { code: 'F7', name: 'F7' },\n { code: 'F8', name: 'F8' },\n { code: 'F9', name: 'F9' },\n { code: 'F10', name: 'F10' },\n { code: 'F11', name: 'F11' },\n { code: 'F12', name: 'F12' },\n { code: 'NumLock', name: 'numLock' },\n { code: 'ScrollLock', name: 'scrollLock' },\n { code: 'Semicolon', name: 'semiColon' },\n { code: 'Equal', name: 'equals' },\n { code: 'Comma', name: 'comma' },\n { code: 'Minus', name: 'dash' },\n { code: 'Period', name: 'dot' },\n { code: 'Slash', name: 'slash' },\n { code: 'Backquote', name: 'backtick' },\n { code: 'Backslash', name: 'backSlash' },\n { code: 'IntlBackslash', name: 'intlBackslash' },\n { code: 'BracketLeft', name: 'openBracket' },\n { code: 'BracketRight', name: 'closeBracket' },\n { code: 'Quote', name: 'quote' },\n { code: 'MetaLeft', name: 'metaLeft' },\n { code: 'MetaRight', name: 'metaRight' }\n];\nexports.default = allKeys;\n\n\n/***/ }),\n\n/***/ \"./src/input/mouse.ts\":\n/*!****************************!*\\\n !*** ./src/input/mouse.ts ***!\n \\****************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create(canvas) {\n var defaultState = function () {\n return {\n position: { x: 0, y: 0 },\n left: defaultButtonState(),\n wheel: defaultWheelState(),\n right: defaultButtonState()\n };\n };\n var defaultButtonState = function () {\n return {\n pressed: false,\n justPressed: false,\n released: false,\n justReleased: false\n };\n };\n var defaultWheelState = function () {\n var buttonState = defaultButtonState();\n return __assign(__assign({}, buttonState), { moved: false, direction: 'up' });\n };\n var prevMouse = defaultState();\n var mouse = defaultState();\n var clone = function (state) {\n return Object.assign({}, state);\n };\n var relative = function (event) {\n var bounds = canvas.getBoundingClientRect();\n return {\n x: event.clientX - bounds.left,\n y: event.clientY - bounds.top\n };\n };\n var move = function (event) {\n var newPos = relative(event);\n mouse.position = newPos;\n };\n var down = function (event) {\n switch (event.which) {\n case 1:\n if (!mouse.left.pressed) {\n mouse.left.justPressed = true;\n }\n mouse.left.pressed = true;\n break;\n case 2:\n if (!mouse.wheel.pressed) {\n mouse.wheel.justPressed = true;\n }\n mouse.wheel.pressed = true;\n break;\n case 3:\n if (!mouse.right.pressed) {\n mouse.right.justPressed = true;\n }\n mouse.right.pressed = true;\n break;\n }\n };\n var up = function (event) {\n switch (event.which) {\n case 1:\n if (!mouse.left.released) {\n mouse.left.justReleased = true;\n }\n mouse.left.released = true;\n mouse.left.pressed = false;\n break;\n case 2:\n if (!mouse.wheel.released) {\n mouse.wheel.justReleased = true;\n }\n mouse.wheel.released = true;\n mouse.wheel.pressed = false;\n break;\n case 3:\n if (!mouse.right.released) {\n mouse.right.justReleased = true;\n }\n mouse.right.released = true;\n mouse.right.pressed = false;\n break;\n }\n };\n var wheel = function (event) {\n mouse.wheel.moved = event.deltaY === 0 ? false : true;\n if (mouse.wheel.moved !== false) {\n mouse.wheel.direction = event.deltaY < 0 ? 'up' : 'down';\n }\n };\n var update = function () {\n mouse.wheel.moved = false;\n mouse.left.justPressed = false;\n mouse.right.justPressed = false;\n mouse.left.justReleased = false;\n mouse.right.justReleased = false;\n mouse.wheel.justPressed = false;\n mouse.wheel.justReleased = false;\n prevMouse = clone(mouse);\n };\n var start = function () {\n // mouse events\n canvas.addEventListener('mousemove', move);\n canvas.addEventListener('mousedown', down);\n canvas.addEventListener('mouseup', up);\n canvas.addEventListener('wheel', wheel);\n // default mouse position, center of screen\n mouse.position.x = canvas.width / 2;\n mouse.position.y = canvas.height / 2;\n };\n return {\n getState: function () { return mouse; },\n start: start,\n update: update\n };\n}\nexports.default = { create: create };\n\n\n/***/ }),\n\n/***/ \"./src/renderer.ts\":\n/*!*************************!*\\\n !*** ./src/renderer.ts ***!\n \\*************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_76230__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar defaults_1 = __nested_webpack_require_76230__(/*! ./graphics/defaults */ \"./src/graphics/defaults.ts\");\nvar shapes_1 = __nested_webpack_require_76230__(/*! ./graphics/shapes */ \"./src/graphics/shapes.ts\");\nvar clear_1 = __nested_webpack_require_76230__(/*! ./graphics/clear */ \"./src/graphics/clear.ts\");\nvar effects_1 = __nested_webpack_require_76230__(/*! ./graphics/effects */ \"./src/graphics/effects.ts\");\nvar images_1 = __nested_webpack_require_76230__(/*! ./graphics/images */ \"./src/graphics/images.ts\");\nvar text_1 = __nested_webpack_require_76230__(/*! ./graphics/text */ \"./src/graphics/text.ts\");\nvar tiles_1 = __nested_webpack_require_76230__(/*! ./graphics/tiles */ \"./src/graphics/tiles.ts\");\nvar sprites_1 = __nested_webpack_require_76230__(/*! ./graphics/sprites */ \"./src/graphics/sprites.ts\");\nvar object_1 = __nested_webpack_require_76230__(/*! ./utils/object */ \"./src/utils/object.ts\");\nfunction create(ctx) {\n var commands = [];\n var filterStack = [];\n var compositeStack = [];\n var transformStack = [];\n var alphaStack = [];\n function recomputeTransforms() {\n ctx.setTransform(1, 0, 0, 1, 0, 0); // reset\n for (var _i = 0, transformStack_1 = transformStack; _i < transformStack_1.length; _i++) {\n var t = transformStack_1[_i];\n var tr = t; // t itself is the transform object\n if ('scale' in tr) {\n var f = tr.scale;\n ctx.translate(tr.around.x, tr.around.y);\n if (typeof f === 'number')\n ctx.scale(f, f);\n else\n ctx.scale(f.x, f.y);\n ctx.translate(-tr.around.x, -tr.around.y);\n }\n if ('rotate' in tr) {\n ctx.translate(tr.around.x, tr.around.y);\n ctx.rotate((tr.rotate * Math.PI) / 180);\n ctx.translate(-tr.around.x, -tr.around.y);\n }\n }\n }\n function recomputeAlpha() {\n ctx.globalAlpha = alphaStack.reduce(function (acc, a) { return acc * a; }, 1);\n }\n function pushBlurFilter(px) {\n commands.push({ type: 'push', filter: \"blur(\".concat(px, \"px)\") });\n }\n function pushColourShiftFilter(options) {\n var hue = options.hue, saturate = options.saturate;\n commands.push({\n type: 'push',\n filter: \"hue-rotate(\".concat(hue, \"deg) saturate(\").concat(saturate, \")\")\n });\n }\n function pushShadow(options) {\n commands.push({ type: 'pushShadow', shadow: options });\n }\n function popShadow() {\n commands.push({ type: 'popShadow' });\n }\n function popFilter() {\n commands.push({ type: 'pop' });\n }\n function blur(drawingOperations, radius) {\n if (radius === void 0) { radius = 4; }\n pushBlurFilter(radius);\n drawingOperations();\n popFilter();\n }\n function colourShift(drawingOperations, options) {\n if (options === void 0) { options = effects_1.defaultColourShift; }\n pushColourShiftFilter(options);\n drawingOperations();\n popFilter();\n }\n function pushComposite(op) {\n commands.push({ type: 'pushComposite', op: op });\n }\n function popComposite() {\n commands.push({ type: 'popComposite' });\n }\n function pushRotationTransform(rotation, around) {\n commands.push({\n type: 'pushTransform',\n transform: { rotate: rotation, around: around }\n });\n }\n function popTransform() {\n commands.push({ type: 'popTransform' });\n }\n function pushScale(factor, around) {\n if (around === void 0) { around = { x: 0, y: 0 }; }\n commands.push({\n type: 'pushTransform',\n transform: { scale: factor, around: around }\n });\n }\n function popScale() {\n commands.push({ type: 'popTransform' });\n }\n function pushStrokeGlow(options) {\n var _a, _b;\n if (options === void 0) { options = effects_1.defaultStrokeGlow; }\n commands.push({\n type: 'pushShadow',\n shadow: {\n shadowColour: (_a = options.color) !== null && _a !== void 0 ? _a : 'white',\n shadowBlur: (_b = options.blur) !== null && _b !== void 0 ? _b : 8,\n shadowOffsetX: 0,\n shadowOffsetY: 0\n }\n });\n }\n function strokeGlow(drawingOperations, options) {\n if (options === void 0) { options = effects_1.defaultStrokeGlow; }\n pushStrokeGlow(options);\n drawingOperations();\n popShadow();\n }\n function scale(drawingOperations, factor, around) {\n if (around === void 0) { around = { x: 0, y: 0 }; }\n pushScale(factor, around);\n drawingOperations();\n popScale();\n }\n function rotation(drawingOperations, rotateBy, around) {\n if (around === void 0) { around = { x: 0, y: 0 }; }\n pushRotationTransform(rotateBy, around);\n drawingOperations();\n popTransform();\n }\n function dodge(drawingOperations) {\n pushComposite('color-dodge');\n drawingOperations();\n popComposite();\n }\n function overlay(drawingOperations) {\n pushComposite('overlay');\n drawingOperations();\n popComposite();\n }\n function pushAlpha(alpha) {\n commands.push({ type: 'pushAlpha', alpha: alpha });\n }\n function popAlpha() {\n commands.push({ type: 'popAlpha' });\n }\n function transparency(drawingOperations, alpha) {\n if (alpha === void 0) { alpha = 0.25; }\n pushAlpha(alpha);\n drawingOperations();\n popAlpha();\n }\n function circle(position, radius, options) {\n if (options === void 0) { options = defaults_1.defaultCircle; }\n commands.push({\n type: 'draw',\n fn: function () { return (0, shapes_1.circle)(ctx, position, radius, options); }\n });\n }\n function clear(colour) {\n commands.push({\n type: 'draw',\n fn: function () { return (0, clear_1.clear)(ctx, colour); }\n });\n }\n function clearRect(rectangle, colour) {\n commands.push({\n type: 'draw',\n fn: function () { return (0, clear_1.clearRect)(ctx, rectangle, colour); }\n });\n }\n function curve(from, to, controlPoints, options) {\n if (options === void 0) { options = defaults_1.defaultLine; }\n commands.push({\n type: 'draw',\n fn: function () { return (0, shapes_1.curve)(ctx, from, to, controlPoints, options); }\n });\n }\n function image(image, position, size) {\n commands.push({\n type: 'draw',\n fn: function () { return (0, images_1.image)(ctx, image, position, size); }\n });\n }\n function subImage(image, position, size, subPosition, subSize) {\n commands.push({\n type: 'draw',\n fn: function () { return (0, images_1.subImage)(ctx, image, position, size, subPosition, subSize); }\n });\n }\n function line(from, to, options) {\n commands.push({\n type: 'draw',\n fn: function () { return (0, shapes_1.line)(ctx, from, to, options); }\n });\n }\n function rect(rectangle, options) {\n commands.push({\n type: 'draw',\n fn: function () { return (0, shapes_1.rect)(ctx, rectangle, options); }\n });\n }\n function shadow(drawingOperations, options) {\n if (options === void 0) { options = defaults_1.defaultDropShadow; }\n var merged = (0, object_1.merge)(defaults_1.defaultDropShadow, options);\n pushShadow(merged);\n drawingOperations();\n popShadow();\n }\n function sprite(spr) {\n commands.push({\n type: 'draw',\n fn: function () { return (0, sprites_1.sprite)(ctx, spr); }\n });\n }\n function square(position, size, options) {\n commands.push({\n type: 'draw',\n fn: function () { return (0, shapes_1.square)(ctx, position, size, options); }\n });\n }\n function txt(position, text, options) {\n if (text === void 0) { text = ''; }\n commands.push({\n type: 'draw',\n fn: function () { return (0, text_1.txt)(ctx, position, text, options); }\n });\n }\n function tiles(position, tileGrid, spriteSheets, scale) {\n commands.push({\n type: 'draw',\n fn: function () { return (0, tiles_1.tiles)(ctx, position, tileGrid, spriteSheets, scale); }\n });\n }\n function transform(drawingOperations, options) {\n if (options === void 0) { options = defaults_1.defaultTransform; }\n var merged = (0, object_1.merge)(defaults_1.defaultTransform, options);\n scale(function () {\n rotation(drawingOperations, merged.rotation, merged.around);\n }, merged.scale, merged.around);\n }\n function multiplyEffect(drawingOperations) {\n pushComposite('multiply');\n drawingOperations();\n popComposite();\n }\n function screen(drawingOperations) {\n pushComposite('screen');\n drawingOperations();\n popComposite();\n }\n function render() {\n for (var _i = 0, commands_1 = commands; _i < commands_1.length; _i++) {\n var cmd = commands_1[_i];\n switch (cmd.type) {\n case 'push': {\n filterStack.push(cmd.filter);\n ctx.filter = filterStack.join(' ');\n break;\n }\n case 'pop': {\n filterStack.pop();\n ctx.filter = filterStack.join(' ');\n break;\n }\n case 'pushAlpha':\n alphaStack.push(cmd.alpha);\n recomputeAlpha();\n break;\n case 'popAlpha':\n alphaStack.pop();\n recomputeAlpha();\n break;\n case 'pushComposite': {\n compositeStack.push(cmd.op);\n ctx.globalCompositeOperation =\n compositeStack[compositeStack.length - 1];\n break;\n }\n case 'popComposite': {\n compositeStack.pop();\n ctx.globalCompositeOperation =\n compositeStack[compositeStack.length - 1] || 'source-over';\n break;\n }\n case 'pushTransform':\n transformStack.push(cmd.transform);\n recomputeTransforms();\n break;\n case 'popTransform':\n transformStack.pop();\n recomputeTransforms();\n break;\n case 'draw': {\n cmd.fn();\n break;\n }\n }\n }\n commands = [];\n filterStack = [];\n compositeStack = [];\n transformStack = [];\n alphaStack = [];\n }\n return {\n circle: circle,\n clear: clear,\n clearRect: clearRect,\n curve: curve,\n dodge: dodge,\n image: image,\n line: line,\n overlay: overlay,\n rotation: rotation,\n rect: rect,\n shadow: shadow,\n sprite: sprite,\n scale: scale,\n square: square,\n subImage: subImage,\n text: txt,\n tiles: tiles,\n transparency: transparency,\n transform: transform,\n multiply: multiplyEffect,\n screen: screen,\n blur: blur,\n colourShift: colourShift,\n strokeGlow: strokeGlow,\n render: render\n };\n}\nexports.default = { create: create };\n\n\n/***/ }),\n\n/***/ \"./src/sounds.ts\":\n/*!***********************!*\\\n !*** ./src/sounds.ts ***!\n \\***********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create(ctx) {\n return {\n play: function (id) {\n },\n pause: function (id) {\n },\n mute: function (id) {\n },\n volume: function (id, level) {\n },\n };\n}\nexports.default = {\n create: create\n};\n\n\n/***/ }),\n\n/***/ \"./src/sprite.ts\":\n/*!***********************!*\\\n !*** ./src/sprite.ts ***!\n \\***********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create(position, size, rotation, texture, colour) {\n if (rotation === void 0) { rotation = 0; }\n if (colour === void 0) { colour = '#ffffff'; }\n var frames = [];\n return {\n size: size,\n texture: texture,\n colour: colour,\n frame: 0,\n position: position,\n setFrames: function (newFrames) {\n frames = newFrames;\n },\n addFrame: function (frame) {\n frames.push(frame);\n },\n get frames() {\n return frames;\n },\n get rotation() {\n return rotation;\n },\n set rotation(degrees) {\n rotation = degrees >= 360 ? 360 - degrees : degrees;\n }\n };\n}\nexports.default = {\n create: create\n};\n\n\n/***/ }),\n\n/***/ \"./src/storage.ts\":\n/*!************************!*\\\n !*** ./src/storage.ts ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clear = exports.remove = exports.load = exports.save = void 0;\nfunction save(key, value) {\n localStorage.setItem(key, value);\n}\nexports.save = save;\nfunction load(key) {\n return localStorage.getItem(key);\n}\nexports.load = load;\nfunction remove(key) {\n localStorage.removeItem(key);\n}\nexports.remove = remove;\nfunction clear() {\n localStorage.clear();\n}\nexports.clear = clear;\n\n\n/***/ }),\n\n/***/ \"./src/types.ts\":\n/*!**********************!*\\\n !*** ./src/types.ts ***!\n \\**********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\n\n/***/ }),\n\n/***/ \"./src/utils/number.ts\":\n/*!*****************************!*\\\n !*** ./src/utils/number.ts ***!\n \\*****************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clamp = exports.toDegrees = exports.toRadians = void 0;\nfunction toRadians(degrees) {\n return degrees * (Math.PI / 180);\n}\nexports.toRadians = toRadians;\nfunction toDegrees(radians) {\n return radians * (180 / Math.PI);\n}\nexports.toDegrees = toDegrees;\nfunction clamp(value, min, max) {\n if (min > max) {\n console.error(\"clamp: the minimum (\".concat(min, \") and maximum (\").concat(max, \") have been passed in the wrong order\"));\n return value;\n }\n if (value < min) {\n return min;\n }\n if (value > max) {\n return max;\n }\n return value;\n}\nexports.clamp = clamp;\nexports.default = {\n toRadians: toRadians,\n toDegrees: toDegrees\n};\n\n\n/***/ }),\n\n/***/ \"./src/utils/object.ts\":\n/*!*****************************!*\\\n !*** ./src/utils/object.ts ***!\n \\*****************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = exports.clone = void 0;\n// TODO: Handle Arrays\nfunction deepClone(obj) {\n var result = {};\n Object.keys(obj).forEach(function (key) {\n switch (typeof obj[key]) {\n case 'object':\n result[key] = deepClone(obj[key]);\n break;\n default:\n result[key] = obj[key];\n }\n });\n return result;\n}\nfunction shallowClone(obj) {\n return __assign({}, obj);\n}\nfunction clone(obj, deep) {\n if (deep === void 0) { deep = true; }\n return deep === true ? deepClone(obj) : shallowClone(obj);\n}\nexports.clone = clone;\n// TODO: Handle Arrays\nfunction deepMerge(a, b) {\n var result = {};\n Object.keys(a).forEach(function (key) {\n if (typeof a[key] === 'object') {\n result[key] = b[key] === undefined ? a[key] : merge(a[key], b[key]);\n }\n else {\n result[key] = b[key] === undefined ? a[key] : b[key];\n }\n });\n // values that only exist on b need to be inserted afterwards\n Object.keys(b).forEach(function (key) {\n if (a[key] === undefined) {\n result[key] = b[key];\n }\n });\n return result;\n}\nfunction shallowMerge(a, b) {\n return __assign(__assign({}, a), b);\n}\nfunction merge(a, b, deep) {\n if (deep === void 0) { deep = true; }\n return deep === true ? deepMerge(a, b) : shallowMerge(a, b);\n}\nexports.merge = merge;\nexports.default = {\n merge: merge,\n clone: clone\n};\n\n\n/***/ }),\n\n/***/ \"./src/vec2.ts\":\n/*!*********************!*\\\n !*** ./src/vec2.ts ***!\n \\*********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create(_x, _y) {\n var x = _x;\n var y = _y;\n var add = function (v) {\n x += v.x;\n y += v.y;\n };\n var addScalar = function (s) {\n x += s;\n y += s;\n };\n var divide = function (v) {\n x /= v.x;\n y /= v.y;\n };\n var divideScalar = function (s) {\n x /= s;\n y /= s;\n };\n var dot = function (v) {\n return x * v.x + y * v.y;\n };\n var getLength = function () {\n return Math.sqrt(x * x + y * y);\n };\n var getOpposite = function () {\n return create(-x, -y);\n };\n var getPerp = function () {\n return create(-y, x);\n };\n var isEqualTo = function (v) {\n return x == v.x && y == v.y;\n };\n var multiply = function (v) {\n x *= v.x;\n y *= v.y;\n };\n var multiplyScalar = function (s) {\n x *= s;\n y *= s;\n };\n var normalise = function () {\n var l = getLength();\n x = x / l;\n y = y / l;\n };\n var setLength = function (l) {\n normalise();\n multiplyScalar(l);\n };\n var subtract = function (v) {\n x -= v.x;\n y -= v.y;\n };\n var subtractScalar = function (s) {\n x -= s;\n y -= s;\n };\n return {\n add: add,\n addScalar: addScalar,\n clone: clone,\n divide: divide,\n divideScalar: divideScalar,\n dot: dot,\n getLength: getLength,\n getOpposite: getOpposite,\n getPerp: getPerp,\n isEqualTo: isEqualTo,\n multiply: multiply,\n multiplyScalar: multiplyScalar,\n normalise: normalise,\n setLength: setLength,\n subtract: subtract,\n subtractScalar: subtractScalar,\n set x(_x) {\n x = _x;\n },\n get x() {\n return x;\n },\n set y(_y) {\n y = _y;\n },\n get y() {\n return y;\n }\n };\n}\nvar fromDegrees = function (degrees) {\n var rad = degrees * (Math.PI / 180);\n return create(Math.cos(rad), Math.sin(rad));\n};\nvar clone = function (v) {\n return create(v.x, v.y);\n};\nexports.default = {\n clone: clone,\n create: create,\n fromDegrees: fromDegrees\n};\n\n\n/***/ })\n\n/******/ });\n});\n//# sourceMappingURL=bramble.js.map\n\n//# sourceURL=webpack://snowfall/./node_modules/.pnpm/@erikwatson+bramble@0.10.0/node_modules/@erikwatson/bramble/dist/bramble.js?");
29
29
 
30
30
  /***/ }),
31
31
 
@@ -116,7 +116,7 @@ eval("var __WEBPACK_AMD_DEFINE_RESULT__;/*\nCopyright 2019 David Bau.\n\nPermiss
116
116
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
117
117
 
118
118
  "use strict";
119
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ diff: () => (/* binding */ diff),\n/* harmony export */ merge: () => (/* binding */ merge),\n/* harmony export */ merge2: () => (/* binding */ merge2)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaults */ \"./src/defaults.ts\");\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\nvar simpleLayerConfig = function (layer, index) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;\n var defaultLayer = index < _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_LAYERS.length ? _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_LAYERS[index] : _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIMPLE_LAYER;\n return {\n colour: layer.colour || defaultLayer.colour || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SNOW_COLOR,\n opacity: layer.opacity || defaultLayer.opacity || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_OPACITY,\n density: layer.density || defaultLayer.density || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_DENSITY,\n mode: 'simple',\n mass: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_MASS), defaultLayer.mass), layer.mass),\n size: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIZE), defaultLayer.size), layer.size),\n sway: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SWAY), defaultLayer.sway), layer.sway),\n gravity: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_GRAVITY), defaultLayer.gravity), layer.gravity),\n wind: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND), defaultLayer.wind), layer.wind), { gusts: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS), (_a = defaultLayer.wind) === null || _a === void 0 ? void 0 : _a.gusts), (_b = layer.wind) === null || _b === void 0 ? void 0 : _b.gusts), { in: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_IN), (_d = (_c = defaultLayer.wind) === null || _c === void 0 ? void 0 : _c.gusts) === null || _d === void 0 ? void 0 : _d.in), (_f = (_e = layer.wind) === null || _e === void 0 ? void 0 : _e.gusts) === null || _f === void 0 ? void 0 : _f.in), { additionalStrength: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH), (_j = (_h = (_g = defaultLayer.wind) === null || _g === void 0 ? void 0 : _g.gusts) === null || _h === void 0 ? void 0 : _h.in) === null || _j === void 0 ? void 0 : _j.additionalStrength), (_m = (_l = (_k = layer.wind) === null || _k === void 0 ? void 0 : _k.gusts) === null || _l === void 0 ? void 0 : _l.in) === null || _m === void 0 ? void 0 : _m.additionalStrength), duration: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DURATION), (_q = (_p = (_o = defaultLayer.wind) === null || _o === void 0 ? void 0 : _o.gusts) === null || _p === void 0 ? void 0 : _p.in) === null || _q === void 0 ? void 0 : _q.duration), (_t = (_s = (_r = layer.wind) === null || _r === void 0 ? void 0 : _r.gusts) === null || _s === void 0 ? void 0 : _s.in) === null || _t === void 0 ? void 0 : _t.duration), delay: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DELAY), (_w = (_v = (_u = defaultLayer.wind) === null || _u === void 0 ? void 0 : _u.gusts) === null || _v === void 0 ? void 0 : _v.in) === null || _w === void 0 ? void 0 : _w.delay), (_z = (_y = (_x = layer.wind) === null || _x === void 0 ? void 0 : _x.gusts) === null || _y === void 0 ? void 0 : _y.in) === null || _z === void 0 ? void 0 : _z.delay) }), out: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_OUT), (_1 = (_0 = defaultLayer.wind) === null || _0 === void 0 ? void 0 : _0.gusts) === null || _1 === void 0 ? void 0 : _1.out), (_3 = (_2 = layer.wind) === null || _2 === void 0 ? void 0 : _2.gusts) === null || _3 === void 0 ? void 0 : _3.out), { duration: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DURATION), (_6 = (_5 = (_4 = defaultLayer.wind) === null || _4 === void 0 ? void 0 : _4.gusts) === null || _5 === void 0 ? void 0 : _5.out) === null || _6 === void 0 ? void 0 : _6.duration), (_9 = (_8 = (_7 = layer.wind) === null || _7 === void 0 ? void 0 : _7.gusts) === null || _8 === void 0 ? void 0 : _8.out) === null || _9 === void 0 ? void 0 : _9.duration), delay: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DELAY), (_12 = (_11 = (_10 = defaultLayer.wind) === null || _10 === void 0 ? void 0 : _10.gusts) === null || _11 === void 0 ? void 0 : _11.out) === null || _12 === void 0 ? void 0 : _12.delay), (_15 = (_14 = (_13 = layer.wind) === null || _13 === void 0 ? void 0 : _13.gusts) === null || _14 === void 0 ? void 0 : _14.out) === null || _15 === void 0 ? void 0 : _15.delay) }) }) })\n };\n};\nvar imageLayerConfig = function (layer, index) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;\n var defaultLayer = _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_IMAGE_LAYER;\n return {\n density: layer.density || defaultLayer.density || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_DENSITY,\n mode: 'image',\n image: layer.image || defaultLayer.image || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_IMAGE,\n opacity: layer.opacity || defaultLayer.opacity || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_OPACITY,\n rotate: layer.rotate || defaultLayer.rotate || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_ROTATE,\n mass: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_MASS), defaultLayer.mass), layer.mass),\n size: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIZE), defaultLayer.size), layer.size),\n sway: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SWAY), defaultLayer.sway), layer.sway),\n gravity: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_GRAVITY), defaultLayer.gravity), layer.gravity),\n wind: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND), defaultLayer.wind), layer.wind), { gusts: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS), (_a = defaultLayer.wind) === null || _a === void 0 ? void 0 : _a.gusts), (_b = layer.wind) === null || _b === void 0 ? void 0 : _b.gusts), { in: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_IN), (_d = (_c = defaultLayer.wind) === null || _c === void 0 ? void 0 : _c.gusts) === null || _d === void 0 ? void 0 : _d.in), (_f = (_e = layer.wind) === null || _e === void 0 ? void 0 : _e.gusts) === null || _f === void 0 ? void 0 : _f.in), { additionalStrength: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH), (_j = (_h = (_g = defaultLayer.wind) === null || _g === void 0 ? void 0 : _g.gusts) === null || _h === void 0 ? void 0 : _h.in) === null || _j === void 0 ? void 0 : _j.additionalStrength), (_m = (_l = (_k = layer.wind) === null || _k === void 0 ? void 0 : _k.gusts) === null || _l === void 0 ? void 0 : _l.in) === null || _m === void 0 ? void 0 : _m.additionalStrength), duration: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DURATION), (_q = (_p = (_o = defaultLayer.wind) === null || _o === void 0 ? void 0 : _o.gusts) === null || _p === void 0 ? void 0 : _p.in) === null || _q === void 0 ? void 0 : _q.duration), (_t = (_s = (_r = layer.wind) === null || _r === void 0 ? void 0 : _r.gusts) === null || _s === void 0 ? void 0 : _s.in) === null || _t === void 0 ? void 0 : _t.duration), delay: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DELAY), (_w = (_v = (_u = defaultLayer.wind) === null || _u === void 0 ? void 0 : _u.gusts) === null || _v === void 0 ? void 0 : _v.in) === null || _w === void 0 ? void 0 : _w.delay), (_z = (_y = (_x = layer.wind) === null || _x === void 0 ? void 0 : _x.gusts) === null || _y === void 0 ? void 0 : _y.in) === null || _z === void 0 ? void 0 : _z.delay) }), out: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_OUT), (_1 = (_0 = defaultLayer.wind) === null || _0 === void 0 ? void 0 : _0.gusts) === null || _1 === void 0 ? void 0 : _1.out), (_3 = (_2 = layer.wind) === null || _2 === void 0 ? void 0 : _2.gusts) === null || _3 === void 0 ? void 0 : _3.out), { duration: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DURATION), (_6 = (_5 = (_4 = defaultLayer.wind) === null || _4 === void 0 ? void 0 : _4.gusts) === null || _5 === void 0 ? void 0 : _5.out) === null || _6 === void 0 ? void 0 : _6.duration), (_9 = (_8 = (_7 = layer.wind) === null || _7 === void 0 ? void 0 : _7.gusts) === null || _8 === void 0 ? void 0 : _8.out) === null || _9 === void 0 ? void 0 : _9.duration), delay: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DELAY), (_12 = (_11 = (_10 = defaultLayer.wind) === null || _10 === void 0 ? void 0 : _10.gusts) === null || _11 === void 0 ? void 0 : _11.out) === null || _12 === void 0 ? void 0 : _12.delay), (_15 = (_14 = (_13 = layer.wind) === null || _13 === void 0 ? void 0 : _13.gusts) === null || _14 === void 0 ? void 0 : _14.out) === null || _15 === void 0 ? void 0 : _15.delay) }) }) })\n };\n};\nfunction mergeBaseConfig(config) {\n var _a;\n var result = __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_BASE_CONFIG), config), { layers: ((_a = config.layers) !== null && _a !== void 0 ? _a : []).map(function (layer, index) {\n return (0,_utils__WEBPACK_IMPORTED_MODULE_1__.isSimpleLayer)(layer)\n ? simpleLayerConfig(layer, index)\n : imageLayerConfig(layer, index);\n }) });\n return result;\n}\nfunction merge(config) {\n var attachTo = config.attachTo, baseConfig = __rest(config, [\"attachTo\"]);\n var basedConfig = mergeBaseConfig(baseConfig);\n return __assign(__assign({}, basedConfig), { attachTo: config.attachTo\n ? (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getElementOrThrow)(config.attachTo)\n : (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getElementOrThrow)(_defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_CONTAINER_ID) });\n}\nfunction merge2(config) {\n var _a;\n var attachTo = config.attachTo, baseConfig = __rest(config, [\"attachTo\"]);\n var basedConfig = mergeBaseConfig(baseConfig);\n return __assign(__assign({}, basedConfig), { attachTo: (_a = config.attachTo) !== null && _a !== void 0 ? _a : _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_CONTAINER_ID });\n}\nfunction isPlainObject(obj) {\n return obj !== null && typeof obj === 'object' && obj.constructor === Object;\n}\nfunction pruneObject(partial, defaultObj) {\n if (!isPlainObject(partial))\n return partial;\n var result = {};\n for (var key in partial) {\n var val = partial[key];\n var defVal = defaultObj[key];\n if (val === defVal)\n continue;\n if (Array.isArray(val)) {\n var prunedArray = pruneArray(val, defaultObj[key] || []);\n if (prunedArray.length > 0)\n result[key] = prunedArray;\n }\n else if (isPlainObject(val)) {\n var pruned = pruneObject(val, defVal || {});\n if (Object.keys(pruned).length > 0)\n result[key] = pruned;\n }\n else {\n result[key] = val;\n }\n }\n return result;\n}\nfunction pruneArray(partialArray, defaultArray) {\n var result = [];\n for (var i = 0; i < partialArray.length; i++) {\n var partialItem = partialArray[i];\n var defaultItem = defaultArray[i] || getDefaultLayer(partialItem);\n var prunedItem = pruneObject(partialItem, defaultItem);\n if (isImageLayerPartial(partialItem) && prunedItem.mode === undefined) {\n prunedItem.mode = 'image';\n }\n result.push(prunedItem);\n }\n return tidyUp(result, defaultArray);\n}\nfunction getDefaultLayer(partialLayer) {\n if (isImageLayerPartial(partialLayer)) {\n return _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_IMAGE_LAYER;\n }\n else {\n return _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIMPLE_LAYER;\n }\n}\nfunction isImageLayerPartial(partial) {\n return (partial.mode === 'image' ||\n partial.image !== undefined ||\n partial.rotate !== undefined);\n}\nfunction tidyUp(layers, defaultLayers) {\n return layers.filter(function (layer, index) {\n if (layers.length > defaultLayers.length) {\n return true;\n }\n if (Object.keys(layer).length > 0) {\n return true;\n }\n // Check if there are any layers after this one that are not empty\n if (!layers.slice(index).every(function (obj) { return Object.keys(obj).length === 0; })) {\n return true;\n }\n return false;\n });\n}\nfunction diff(config) {\n var defaultConfig = _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_USER_CONFIG;\n return pruneObject(config, defaultConfig);\n}\n\n\n//# sourceURL=webpack://snowfall/./src/config.ts?");
119
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ diff: () => (/* binding */ diff),\n/* harmony export */ merge: () => (/* binding */ merge),\n/* harmony export */ merge2: () => (/* binding */ merge2)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaults */ \"./src/defaults.ts\");\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\nvar simpleLayerConfig = function (layer, index) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;\n var defaultLayer = index < _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_LAYERS.length ? _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_LAYERS[index] : _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIMPLE_LAYER;\n return {\n colour: layer.colour || defaultLayer.colour || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SNOW_COLOR,\n opacity: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_OPACITY), defaultLayer.opacity), layer === null || layer === void 0 ? void 0 : layer.opacity),\n density: layer.density || defaultLayer.density || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_DENSITY,\n mode: 'simple',\n mass: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_MASS), defaultLayer.mass), layer.mass),\n size: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIZE), defaultLayer.size), layer.size),\n sway: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SWAY), defaultLayer.sway), layer.sway),\n gravity: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_GRAVITY), defaultLayer.gravity), layer.gravity),\n wind: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND), defaultLayer.wind), layer.wind), { gusts: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS), (_a = defaultLayer.wind) === null || _a === void 0 ? void 0 : _a.gusts), (_b = layer.wind) === null || _b === void 0 ? void 0 : _b.gusts), { in: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_IN), (_d = (_c = defaultLayer.wind) === null || _c === void 0 ? void 0 : _c.gusts) === null || _d === void 0 ? void 0 : _d.in), (_f = (_e = layer.wind) === null || _e === void 0 ? void 0 : _e.gusts) === null || _f === void 0 ? void 0 : _f.in), { additionalStrength: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH), (_j = (_h = (_g = defaultLayer.wind) === null || _g === void 0 ? void 0 : _g.gusts) === null || _h === void 0 ? void 0 : _h.in) === null || _j === void 0 ? void 0 : _j.additionalStrength), (_m = (_l = (_k = layer.wind) === null || _k === void 0 ? void 0 : _k.gusts) === null || _l === void 0 ? void 0 : _l.in) === null || _m === void 0 ? void 0 : _m.additionalStrength), duration: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DURATION), (_q = (_p = (_o = defaultLayer.wind) === null || _o === void 0 ? void 0 : _o.gusts) === null || _p === void 0 ? void 0 : _p.in) === null || _q === void 0 ? void 0 : _q.duration), (_t = (_s = (_r = layer.wind) === null || _r === void 0 ? void 0 : _r.gusts) === null || _s === void 0 ? void 0 : _s.in) === null || _t === void 0 ? void 0 : _t.duration), delay: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DELAY), (_w = (_v = (_u = defaultLayer.wind) === null || _u === void 0 ? void 0 : _u.gusts) === null || _v === void 0 ? void 0 : _v.in) === null || _w === void 0 ? void 0 : _w.delay), (_z = (_y = (_x = layer.wind) === null || _x === void 0 ? void 0 : _x.gusts) === null || _y === void 0 ? void 0 : _y.in) === null || _z === void 0 ? void 0 : _z.delay) }), out: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_OUT), (_1 = (_0 = defaultLayer.wind) === null || _0 === void 0 ? void 0 : _0.gusts) === null || _1 === void 0 ? void 0 : _1.out), (_3 = (_2 = layer.wind) === null || _2 === void 0 ? void 0 : _2.gusts) === null || _3 === void 0 ? void 0 : _3.out), { duration: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DURATION), (_6 = (_5 = (_4 = defaultLayer.wind) === null || _4 === void 0 ? void 0 : _4.gusts) === null || _5 === void 0 ? void 0 : _5.out) === null || _6 === void 0 ? void 0 : _6.duration), (_9 = (_8 = (_7 = layer.wind) === null || _7 === void 0 ? void 0 : _7.gusts) === null || _8 === void 0 ? void 0 : _8.out) === null || _9 === void 0 ? void 0 : _9.duration), delay: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DELAY), (_12 = (_11 = (_10 = defaultLayer.wind) === null || _10 === void 0 ? void 0 : _10.gusts) === null || _11 === void 0 ? void 0 : _11.out) === null || _12 === void 0 ? void 0 : _12.delay), (_15 = (_14 = (_13 = layer.wind) === null || _13 === void 0 ? void 0 : _13.gusts) === null || _14 === void 0 ? void 0 : _14.out) === null || _15 === void 0 ? void 0 : _15.delay) }) }) })\n };\n};\nvar imageLayerConfig = function (layer, index) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;\n var defaultLayer = _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_IMAGE_LAYER;\n return {\n density: layer.density || defaultLayer.density || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_DENSITY,\n mode: 'image',\n image: layer.image || defaultLayer.image || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_IMAGE,\n opacity: layer.opacity || defaultLayer.opacity || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_OPACITY,\n rotate: layer.rotate || defaultLayer.rotate || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_ROTATE,\n mass: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_MASS), defaultLayer.mass), layer.mass),\n size: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIZE), defaultLayer.size), layer.size),\n sway: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SWAY), defaultLayer.sway), layer.sway),\n gravity: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_GRAVITY), defaultLayer.gravity), layer.gravity),\n wind: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND), defaultLayer.wind), layer.wind), { gusts: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS), (_a = defaultLayer.wind) === null || _a === void 0 ? void 0 : _a.gusts), (_b = layer.wind) === null || _b === void 0 ? void 0 : _b.gusts), { in: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_IN), (_d = (_c = defaultLayer.wind) === null || _c === void 0 ? void 0 : _c.gusts) === null || _d === void 0 ? void 0 : _d.in), (_f = (_e = layer.wind) === null || _e === void 0 ? void 0 : _e.gusts) === null || _f === void 0 ? void 0 : _f.in), { additionalStrength: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH), (_j = (_h = (_g = defaultLayer.wind) === null || _g === void 0 ? void 0 : _g.gusts) === null || _h === void 0 ? void 0 : _h.in) === null || _j === void 0 ? void 0 : _j.additionalStrength), (_m = (_l = (_k = layer.wind) === null || _k === void 0 ? void 0 : _k.gusts) === null || _l === void 0 ? void 0 : _l.in) === null || _m === void 0 ? void 0 : _m.additionalStrength), duration: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DURATION), (_q = (_p = (_o = defaultLayer.wind) === null || _o === void 0 ? void 0 : _o.gusts) === null || _p === void 0 ? void 0 : _p.in) === null || _q === void 0 ? void 0 : _q.duration), (_t = (_s = (_r = layer.wind) === null || _r === void 0 ? void 0 : _r.gusts) === null || _s === void 0 ? void 0 : _s.in) === null || _t === void 0 ? void 0 : _t.duration), delay: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DELAY), (_w = (_v = (_u = defaultLayer.wind) === null || _u === void 0 ? void 0 : _u.gusts) === null || _v === void 0 ? void 0 : _v.in) === null || _w === void 0 ? void 0 : _w.delay), (_z = (_y = (_x = layer.wind) === null || _x === void 0 ? void 0 : _x.gusts) === null || _y === void 0 ? void 0 : _y.in) === null || _z === void 0 ? void 0 : _z.delay) }), out: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_OUT), (_1 = (_0 = defaultLayer.wind) === null || _0 === void 0 ? void 0 : _0.gusts) === null || _1 === void 0 ? void 0 : _1.out), (_3 = (_2 = layer.wind) === null || _2 === void 0 ? void 0 : _2.gusts) === null || _3 === void 0 ? void 0 : _3.out), { duration: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DURATION), (_6 = (_5 = (_4 = defaultLayer.wind) === null || _4 === void 0 ? void 0 : _4.gusts) === null || _5 === void 0 ? void 0 : _5.out) === null || _6 === void 0 ? void 0 : _6.duration), (_9 = (_8 = (_7 = layer.wind) === null || _7 === void 0 ? void 0 : _7.gusts) === null || _8 === void 0 ? void 0 : _8.out) === null || _9 === void 0 ? void 0 : _9.duration), delay: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DELAY), (_12 = (_11 = (_10 = defaultLayer.wind) === null || _10 === void 0 ? void 0 : _10.gusts) === null || _11 === void 0 ? void 0 : _11.out) === null || _12 === void 0 ? void 0 : _12.delay), (_15 = (_14 = (_13 = layer.wind) === null || _13 === void 0 ? void 0 : _13.gusts) === null || _14 === void 0 ? void 0 : _14.out) === null || _15 === void 0 ? void 0 : _15.delay) }) }) })\n };\n};\nfunction mergeBaseConfig(config) {\n var _a;\n var result = __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_BASE_CONFIG), config), { layers: ((_a = config.layers) !== null && _a !== void 0 ? _a : []).map(function (layer, index) {\n return (0,_utils__WEBPACK_IMPORTED_MODULE_1__.isSimpleLayer)(layer)\n ? simpleLayerConfig(layer, index)\n : imageLayerConfig(layer, index);\n }) });\n return result;\n}\nfunction merge(config) {\n var attachTo = config.attachTo, baseConfig = __rest(config, [\"attachTo\"]);\n var basedConfig = mergeBaseConfig(baseConfig);\n return __assign(__assign({}, basedConfig), { attachTo: config.attachTo\n ? (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getElementOrThrow)(config.attachTo)\n : (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getElementOrThrow)(_defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_CONTAINER_ID) });\n}\nfunction merge2(config) {\n var _a;\n var attachTo = config.attachTo, baseConfig = __rest(config, [\"attachTo\"]);\n var basedConfig = mergeBaseConfig(baseConfig);\n return __assign(__assign({}, basedConfig), { attachTo: (_a = config.attachTo) !== null && _a !== void 0 ? _a : _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_CONTAINER_ID });\n}\nfunction isPlainObject(obj) {\n return obj !== null && typeof obj === 'object' && obj.constructor === Object;\n}\nfunction pruneObject(partial, defaultObj) {\n if (!isPlainObject(partial))\n return partial;\n var result = {};\n for (var key in partial) {\n var val = partial[key];\n var defVal = defaultObj[key];\n if (val === defVal)\n continue;\n if (Array.isArray(val)) {\n var prunedArray = pruneArray(val, defaultObj[key] || []);\n if (prunedArray.length > 0)\n result[key] = prunedArray;\n }\n else if (isPlainObject(val)) {\n var pruned = pruneObject(val, defVal || {});\n if (Object.keys(pruned).length > 0)\n result[key] = pruned;\n }\n else {\n result[key] = val;\n }\n }\n return result;\n}\nfunction pruneArray(partialArray, defaultArray) {\n var result = [];\n for (var i = 0; i < partialArray.length; i++) {\n var partialItem = partialArray[i];\n var defaultItem = defaultArray[i] || getDefaultLayer(partialItem);\n var prunedItem = pruneObject(partialItem, defaultItem);\n if (isImageLayerPartial(partialItem) && prunedItem.mode === undefined) {\n prunedItem.mode = 'image';\n }\n result.push(prunedItem);\n }\n return tidyUp(result, defaultArray);\n}\nfunction getDefaultLayer(partialLayer) {\n if (isImageLayerPartial(partialLayer)) {\n return _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_IMAGE_LAYER;\n }\n else {\n return _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIMPLE_LAYER;\n }\n}\nfunction isImageLayerPartial(partial) {\n return (partial.mode === 'image' ||\n partial.image !== undefined ||\n partial.rotate !== undefined);\n}\nfunction tidyUp(layers, defaultLayers) {\n return layers.filter(function (layer, index) {\n if (layers.length > defaultLayers.length) {\n return true;\n }\n if (Object.keys(layer).length > 0) {\n return true;\n }\n // Check if there are any layers after this one that are not empty\n if (!layers.slice(index).every(function (obj) { return Object.keys(obj).length === 0; })) {\n return true;\n }\n return false;\n });\n}\nfunction diff(config) {\n var defaultConfig = _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_USER_CONFIG;\n return pruneObject(config, defaultConfig);\n}\n\n\n//# sourceURL=webpack://snowfall/./src/config.ts?");
120
120
 
121
121
  /***/ }),
122
122
 
@@ -127,7 +127,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
127
127
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
128
128
 
129
129
  "use strict";
130
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BASE_LAYER_CONFIG: () => (/* binding */ BASE_LAYER_CONFIG),\n/* harmony export */ DEFAULT_AMPLITUDE: () => (/* binding */ DEFAULT_AMPLITUDE),\n/* harmony export */ DEFAULT_BASE_CONFIG: () => (/* binding */ DEFAULT_BASE_CONFIG),\n/* harmony export */ DEFAULT_CONTAINER_ID: () => (/* binding */ DEFAULT_CONTAINER_ID),\n/* harmony export */ DEFAULT_DENSITY: () => (/* binding */ DEFAULT_DENSITY),\n/* harmony export */ DEFAULT_FREQUENCY: () => (/* binding */ DEFAULT_FREQUENCY),\n/* harmony export */ DEFAULT_GRAVITY: () => (/* binding */ DEFAULT_GRAVITY),\n/* harmony export */ DEFAULT_GRAVITY_ANGLE: () => (/* binding */ DEFAULT_GRAVITY_ANGLE),\n/* harmony export */ DEFAULT_GRAVITY_STRENGTH: () => (/* binding */ DEFAULT_GRAVITY_STRENGTH),\n/* harmony export */ DEFAULT_IMAGE: () => (/* binding */ DEFAULT_IMAGE),\n/* harmony export */ DEFAULT_IMAGE_LAYER: () => (/* binding */ DEFAULT_IMAGE_LAYER),\n/* harmony export */ DEFAULT_LAYERS: () => (/* binding */ DEFAULT_LAYERS),\n/* harmony export */ DEFAULT_MASS: () => (/* binding */ DEFAULT_MASS),\n/* harmony export */ DEFAULT_MASS_MAX: () => (/* binding */ DEFAULT_MASS_MAX),\n/* harmony export */ DEFAULT_MASS_MIN: () => (/* binding */ DEFAULT_MASS_MIN),\n/* harmony export */ DEFAULT_MODE: () => (/* binding */ DEFAULT_MODE),\n/* harmony export */ DEFAULT_OPACITY: () => (/* binding */ DEFAULT_OPACITY),\n/* harmony export */ DEFAULT_OPACITY_MAX: () => (/* binding */ DEFAULT_OPACITY_MAX),\n/* harmony export */ DEFAULT_OPACITY_MIN: () => (/* binding */ DEFAULT_OPACITY_MIN),\n/* harmony export */ DEFAULT_ROTATE: () => (/* binding */ DEFAULT_ROTATE),\n/* harmony export */ DEFAULT_SIMPLE_LAYER: () => (/* binding */ DEFAULT_SIMPLE_LAYER),\n/* harmony export */ DEFAULT_SIZE: () => (/* binding */ DEFAULT_SIZE),\n/* harmony export */ DEFAULT_SIZE_MAX: () => (/* binding */ DEFAULT_SIZE_MAX),\n/* harmony export */ DEFAULT_SIZE_MIN: () => (/* binding */ DEFAULT_SIZE_MIN),\n/* harmony export */ DEFAULT_SNOW_COLOR: () => (/* binding */ DEFAULT_SNOW_COLOR),\n/* harmony export */ DEFAULT_SWAY: () => (/* binding */ DEFAULT_SWAY),\n/* harmony export */ DEFAULT_USER_CONFIG: () => (/* binding */ DEFAULT_USER_CONFIG),\n/* harmony export */ DEFAULT_WIND: () => (/* binding */ DEFAULT_WIND),\n/* harmony export */ DEFAULT_WIND_ANGLE: () => (/* binding */ DEFAULT_WIND_ANGLE),\n/* harmony export */ DEFAULT_WIND_GUSTS: () => (/* binding */ DEFAULT_WIND_GUSTS),\n/* harmony export */ DEFAULT_WIND_GUSTS_ACTIVE: () => (/* binding */ DEFAULT_WIND_GUSTS_ACTIVE),\n/* harmony export */ DEFAULT_WIND_GUSTS_CHANGE_CHANCE: () => (/* binding */ DEFAULT_WIND_GUSTS_CHANGE_CHANCE),\n/* harmony export */ DEFAULT_WIND_GUSTS_IN: () => (/* binding */ DEFAULT_WIND_GUSTS_IN),\n/* harmony export */ DEFAULT_WIND_GUSTS_OUT: () => (/* binding */ DEFAULT_WIND_GUSTS_OUT),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH: () => (/* binding */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX: () => (/* binding */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN: () => (/* binding */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DELAY: () => (/* binding */ DEFAULT_WIND_IN_DELAY),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MAX: () => (/* binding */ DEFAULT_WIND_IN_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MIN: () => (/* binding */ DEFAULT_WIND_IN_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DURATION: () => (/* binding */ DEFAULT_WIND_IN_DURATION),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MAX: () => (/* binding */ DEFAULT_WIND_IN_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MIN: () => (/* binding */ DEFAULT_WIND_IN_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY: () => (/* binding */ DEFAULT_WIND_OUT_DELAY),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MAX: () => (/* binding */ DEFAULT_WIND_OUT_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MIN: () => (/* binding */ DEFAULT_WIND_OUT_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION: () => (/* binding */ DEFAULT_WIND_OUT_DURATION),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MAX: () => (/* binding */ DEFAULT_WIND_OUT_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MIN: () => (/* binding */ DEFAULT_WIND_OUT_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_STRENGTH: () => (/* binding */ DEFAULT_WIND_STRENGTH),\n/* harmony export */ getDefaultConfig: () => (/* binding */ getDefaultConfig)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n\n// Basic\nvar DEFAULT_CONTAINER_ID = 'snowfall';\nvar DEFAULT_SNOW_COLOR = '#ffffff';\nvar DEFAULT_DENSITY = 200;\nvar DEFAULT_MASS_MIN = 1;\nvar DEFAULT_MASS_MAX = 3;\nvar DEFAULT_SIZE_MIN = 1;\nvar DEFAULT_SIZE_MAX = 3;\nvar DEFAULT_ROTATE = false;\nvar DEFAULT_MODE = 'simple';\nvar DEFAULT_IMAGE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfpChoFCDEXRwdpAAARX0lEQVR42u1bd1QUd7t+Z/ssuwtb2KU3pVkIEBFRkIiaKCKIikb9NBJNjCamWK7m+6I3iSbRY0xi/GJvsYSooGBBDZao2BBpAkovu/TdpWyb3dmZ3/eH5eaeGAREybnX55w5Z3Z35n2f95l33l9dgJd4iZd4ib4D9vDoUwIvHJu37wONpoU1OWHGAgCAY0d/3S6VyqyLF8x94VxYfSEAAIDCwUmI8/nvPjh3/MVKkq19waNPBKBpChDNxAABAwAA0TRG01RfUHlA4MUD6+J3/2cF+PvgeQrQWxX+ubYUvV4Dlv/zc8jOus7YuHn7u2w2x7e9rS2psaE+VyqTkaPCgrpk4+KNXGjVaNgKR6cgW1vbGRaLpWTp4gU7QkLD6A1ff9GrfHszAzAAwMxmArhcHoPHw4faiSUfu7p7nA0IDN7J4XIjk09m8PLLVACAnnA7grySWkg9+zuPy+VFDn4laKerm/tZsUTyMQ/Hh3J5PKbZTDz205uknwlXswsB0cjeXqFYou/oOO/q7nnBYiZAqayV8fn8SSJb20Q2mzMUABGEiTjX3t62W6tRXy4rvc97I3riZQCAc+knI/38BxJCkWikRCKbx+XxxmEYhlvM5iy9XrdXr9elOjm5tOB8PihrqkcLRKIxLU1N32EMrCViyKBefIY9QHWzHqqadCNUWoKoaGjbjBACr37e8N7iTwAhBGd/vynJuls2o6K+LaNWbTQrNSZTmUqbfi3n3vzyutaS8rrWkqvZhfPK61pPK9VGU63aaC6vaz1/u7B85m9XsiQIIZid+A549fMGhBBUNLRtVmkJoqpJN6K6Wd+3wQMA1LdZoL7NElHfZjFXNXZsQQiBu6fX499nvTUPKhra4GTGVeHN/JLYsjptWk2LwaDUmKwqLWFVaQmrUm0ka1oMhrI67YlbBaVxZy7dELWTCCYnzHhsx93TCxBCUNXYsaW+zWJ+6POZ+fdaEUQIPX6z//heHfp5Nxz6eTcAgO5WQdmJnNtZ513c3IbLFQ7v4Dg/DgCAIIi05qbGXSplzTVPr/7G8aPC/mT/kU300BeG9U4ZeKoAB46kQXNTIxNjMEAms6fmTJ/UY2ehAd6wL+mYsby05HxledndsBEjBwMA3Lx+9UOappsMej1MnzT+mQLafzgVNOoWJk3TIFc4ULOnxXV6faetwIEjaWA0GjnjYuJWR8fE/ejV32egRCrDvtrwQ48Jzp0xGdpaW0Gn6yARIAoBonS6DrKttRUWzZ/dY7vfbNwMvv4DMFc394HjJsRuGhcTt9poNHD2H07tuQAMBgNYLBaTyWD62AiEi1xcXNMv3chdHhgcIkcIQXRsfI8JP8jlPxw9xKSp0wEhBEGvhsiPnvhtuYdX/9MCoeh9BoPhw2KxmQwGs+cC7N7+E4SFjzRVlJcubm3VLkMAtFQqW+frP+BEzr3qqbMT38EtFnPP2T8jLBYLTJoyHc8rqZ3i7euXJpFI1yGEkFajXl5Wcv/DkNAw054d/+65ABczzsIADwXcupGpDujv/J2ytjpab9Bv43C4/vZyxYFXh4Tura6qDLaSJKO3ilJXgGEYWK1WhrK2OmjYiIg9Upn9QTaLPUCn122vqaqMfsXHdeONzMstAd4ucDHjXKe2utQKfPnZCgAA1NLcdC/vTvZHYeERx+zsJMtwPn+qh6fXSIvFcpvJYjEx7EEyPy3teoJHNjEMEEKISVosn7i5eQxlMJlyk9F4QavVbLh25dJlF1d3EgDgmy9Xdc1ud0hMmTAGCMJEsljs80WFBdOamxrfoWnUjvP5sRiGMRGN5EnH00VHTpyDWW/N67Xg585/D5JPZcDRk7+JEEJyDMOYPByPoyiqQ93S/O69orsJPB7vvNFoIKdPGtc9YbtL5ocN34C7hxswmUyaJMlmkrRoAQAoikJsDiduSMiwX61Wa1TwkKHsX4+nP3PwySczIDgklE1R1lFBwSFJHA4njqIoBABAkhatmSCaEADt5+MKP25c3237XRYgdnICIIRg98Ej4uqqmul+/gOPObu4puA4P8hkMp5pbKhfZDDoj+M4HuXo5HwsemL89wpHJ18AwFZ81v0R3Ko16wAAMHu53GfM6+O/Uzg4HefyeKMNBkNqU2PDQpPJmI7j/EBnV7eUAYMGH79fqnxz94EjYoQQjI+J67KfpwowZfosQAjBog+XyvNLlW/39/E7aS9XHORwucPNBJFer1ImFN0tmGa1kttuXc9MVKtb5litZIlQJFzk7uGVnl+q/Dg8MkpWXN0ES1c+/b384ptvoaiyAUZEvCa9W173kZuH1xmRyPZ9i8Vc2tLc9FZu9u25Wo16+52sm9MbGuqmEgRxmsvlDZPJ7A/4Dxp86m553bxFHy2TI4Rg4qSpT/XXaek+dT4TKIriuXt4viUQChfwePgrVqu13WI2n1KrW/aqaqtvyuQKU9TDcf7kaTMg5fAvcO5KloOTk3OiyNZuIZPJdDabiesatfrb/Nw758QSCVGvUgGbzZaMHTfhMgBAxtnTkSRJat3cPaC9rZU36JWg18USyTIOhzuCoqz1ep1ua0111Z7oqOGNsfEJcDI1GQAAkk9lQEd7O89/4OBhUpnsbQ6HG8NisWwJwlRgMhq3VZSV/sxis4mYMeE9ywCJVAoymb2TyNZuJYvFcjHo9TtUyprxqSmH55fcK7q0d+fWx8EDABw7kgQYhkF+TnbjW2/Gr6tXKScYDPq9HA430NHJKSnitaidCgfHoF3bNv9J+IP7dmJyB4egsPCRO+QKhyQ2mx2s1+n2KWtqomdOiVmXm53ViGHY4+ABAKbGjIWjSQeI+8WFv6cmH55fp6od39HRvp3FZDkLBMKV9nKFk0Qq7XkGHDlxDhBCHG8fvzC9Ttd2Lv1EkVRmb13ywbtPTS0AgPSL10GrUXN8/AaMFkuky3g8XiRFUc16nW5byb2i4wGBwYcAAPJysmf6DxwULxSJ3mMwmA5mgrisbmneUFx096JUZm+OeyOyS/42bt4BKmUNK37qmwMFQqFdWen9GxiGWabFvtGl+58LVq5eA7fvlsOx9Avi/FLloqomXYlKS9Dlda3F1U261upmnba8vrVIqTHRlY0dJXklte+fvnBNXNnYDgve/7jviPc2dh04AgCAXbyR61lYUf9DrdporG+zoPo2C6pVG0wFZapNGVezPQEA27LrwAvj9TebFn+GUdHfVYAlKz6D7KJKkEik4vxS5UJPr35n7cSSDy1mc7XFbG6zWMytFoulUiyRLu7n7Xs2r6R2kbun1wt7BTotgsknM8BKWdm+fgPCKYrqyMnOKrC3l5Px0VFdMn76wjXQatQcX/+Bo8USyTIeD39QBPW6bSXFf10ECYK4rOlBETx+5iJo1Gp2YPCQACaTKbpfXJTJYjHJhE6KYKcZwGKxgMPhOApFoh1yhUPGiJGvbXN0dg7fcyiZm3E1G3x8/Z943/rvf4KgV0MwsVgyOCR0+BYHR6cjXC43TK/XJdXWVE14c9L4NU2NDXUPHwDW0txUnzhzylqVUhljNOgPcbncUCcXl6NhIyK2SCTSwQGBwYy1679/oi9fvwFw4XoO7Es6xnVydg0fHhG5Va5wyBCKRDs4XI4ji8XueQYcP3MRDHoDNyAwaIZAIFzIYrNfBQCD0WA4YzDo9+Tn3skMCQ0zDu7vDACddYTM17XqlocdISlRp1L+dUeovY03KCCwSx2h/FIlFBcW8L19/UfY2Ajm2QgE4wHAxmq15ug62rcW5OX+YmNjY548YXTPMiB+fBSUl5WYvfs778vLvROtUbfMJS2WHL6NTbxcrkgdERF52Gq1xh88elJ0p7gKZs2Zx88rqZ3m7eObJpFKv6JpmtRq1EvvF9+NF4ps00ruFxNTJ479a3/RUVBTXUngOH6irOR+fFurdglCYLGzE699MAlTNX3W3Hn8ospGOJx2VkRR1KSgIUN/VTg4ptoIBJNJksxtaW5KLC4siA7wdtlbWJDXafBPzYA/YsOmrTBkaBg0NdaLfPwGjBYIBPN4OD8KwzAGQRCZJpMxlcfDI3Acj6NpmjAaDAcbG+s3jxoWWLpy1Zdo3ZrVj21t2rrniRnw0cK3H1+zes16+HLVCuzyrXxve7lisUAomg0APJPJeMJMEFdwnB/Hw/EIhGjaTJgvtbe37amtqT7v7OLanpZyGL7+4rMuxdWjaZxbBaVw63omPmx4RLidRPKZjY1gJEIIEEKkyWg8r9Vqvr125dJVZxdX8s346D/d3xUBHiH5ZAY01KvYw0aMDLcTi5fhOD4WAGNjGAZ6ve5KW6t2bc7trGvunl7GVSuWwJ3bN7sVS7ebwXXf/Ru4XB54ePZjs9hsFxaLZQ/wYALVoNenZ165NIOyWi/mZGc9MfjuYurEsXDn9i2Sslov3ci8OtOg159mMB7QZrHYci6X5+rs4spycXWH2MkJ3bbfLQFSTp8HPt+GTVosY/wHDj5iL1fsZDCYduqWluMkSZI0TakTZ05pHz8q7NFiSK9g365t8HpkKMyeFttOUbSGJElSo245xmKxbKUy+x1+AwYdNRoNY2xsbNi/Hj/T+wKsXrseAACzt1f4vx4ds0nh6JTC5fEiTUZjsrK2OqamquJbmqat6Llu8/ifXiJN09aqyvKNdSpljMGgP8rD8ZFOTs4pE2In/6hwcPQHAOzT1WueXYCoseOgqKoRQsPCZQXldUtc3d3TBTaC9ywW872W5qbZOdm3EgmTKYfBYNDPL/AnioFhGIM26HU5N69dfVujbvkHaSWLhULhAndPr/T8UuXSsPBI+4IyFUSN7Xwk2KkA8xa8DzevXcX79ffZLBZLvsUAY2g06pWl94pjg/09kg/s3Wl6kdPhT0JqymFToK9bSnlpSZxWq1mJYRgmkco2ePv6/Xj71g387Xc/6LkANE2D1WqlKJoqNeh1W1QqZfSosKANuTm3mzEMg9MnjveMNfYXR08ESD4MGIZBTnZWc0Ls6xuqK8sn6HUdP9E0XWq1ktTTdp91ui4we1ocHDiSZjl7Ku3LR4ujWo0a/rX8456xBYCQ0DBQKByAIAjeI/84zueJxTgMGToMsrO614w9wqdLFwMAIGVtTVFeTvZHXV0cferCyEMDz7yJT+HgCI0N9ZB8MsPWs1//MQKBcD6O4/0QAhgeHrnbZDLu+q9/fX4+IfaNdgdHJ2hqbOiRn4er113m2yvDYdTJ5zFvRANCCLbv/UVaWFE/OzB4SJrCwTEJ5+OjaBphgBDwcHyUVGafFBwSmlZYUT/np137ZQgh+PS/1/YGvecrAIPBACaTSQEAwh4qz2BgkPjOIgAA7MOlKxyLKhveGxQQmC4WS/ZyuJwgk8mYUlVZMYcgTOUmwlRRU10522gwJLPZnCA7sWRPUHBIemFlw8LQsHAnAMA2bdsDDOwhVQwoAIxmMpn0ow7Rs+CZd4hgGAYsFqvCZDRs1Ok6Mk2ggKyCcqhT1Tov+3TVDB4Pn8PlcgdRFKU1GAw/t2o1ezOv/p7Fx/kCZxfXVQAAhfl5F653XE6LGjsuRCgSJfJxfpydnfingFeCFhVWNOxvbKhLupZzT2UAAH1HRzIg1MRiscqhF1qg3mzDMACAJSs+Q8raGvYXX2/YK7K1nWW1UvUGvT5Z19G+PzXlcEE/b1/SaDA8cSwgEAqgsryMPTE+YbBQJJpjYyNIYDGZTu0d7Yc+/+eyRFc3D/K79Wv/uFvmmdGbGyURwIM1+6NJB6h/ff7V2Y72jrK2ttbkX/bvue/t40c9GhFu2rrniQbm/WMaAACpcHTKKS+9nz9jduJOW1vxVNJiqTiadJD64JPlvRb4/3pqLxrdGQ0+b/zNZoVfPF4K0DduURe/e/7ok3+MMBhMwBgMBBjQAAAYg4Gex7aav60AAABNjQ06k9G449G5VCrrKyp9ij7/29xLvMRL/P/GfwC4DUfXnXWOvwAAAABJRU5ErkJggg==';\nvar DEFAULT_OPACITY_MIN = 0;\nvar DEFAULT_OPACITY_MAX = 1;\n// Mass\nvar DEFAULT_MASS = {\n min: DEFAULT_MASS_MIN,\n max: DEFAULT_MASS_MAX\n};\n// Size\nvar DEFAULT_SIZE = {\n min: DEFAULT_SIZE_MIN,\n max: DEFAULT_SIZE_MAX\n};\n// Opacity\nvar DEFAULT_OPACITY = {\n min: DEFAULT_OPACITY_MIN,\n max: DEFAULT_OPACITY_MAX\n};\n// Sway\nvar DEFAULT_AMPLITUDE = 1.0;\nvar DEFAULT_FREQUENCY = 0.02;\nvar DEFAULT_SWAY = {\n frequency: DEFAULT_FREQUENCY,\n amplitude: DEFAULT_AMPLITUDE\n};\n// Gravity\nvar DEFAULT_GRAVITY_ANGLE = 90;\nvar DEFAULT_GRAVITY_STRENGTH = 0.7;\nvar DEFAULT_GRAVITY = {\n angle: DEFAULT_GRAVITY_ANGLE,\n strength: DEFAULT_GRAVITY_STRENGTH\n};\n// Wind\nvar DEFAULT_WIND_ANGLE = 0;\nvar DEFAULT_WIND_STRENGTH = 0;\nvar DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN = 1;\nvar DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX = 3;\nvar DEFAULT_WIND_IN_ADDITIONAL_STRENGTH = {\n min: DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN,\n max: DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX\n};\nvar DEFAULT_WIND_IN_DURATION_MIN = 1000;\nvar DEFAULT_WIND_IN_DURATION_MAX = 3000;\nvar DEFAULT_WIND_IN_DURATION = {\n min: DEFAULT_WIND_IN_DURATION_MIN,\n max: DEFAULT_WIND_IN_DURATION_MAX\n};\nvar DEFAULT_WIND_IN_DELAY_MIN = 1000;\nvar DEFAULT_WIND_IN_DELAY_MAX = 10000;\nvar DEFAULT_WIND_IN_DELAY = {\n min: DEFAULT_WIND_IN_DELAY_MIN,\n max: DEFAULT_WIND_IN_DELAY_MAX\n};\nvar DEFAULT_WIND_OUT_DELAY_MIN = 5000;\nvar DEFAULT_WIND_OUT_DELAY_MAX = 10000;\nvar DEFAULT_WIND_OUT_DELAY = {\n min: DEFAULT_WIND_OUT_DELAY_MIN,\n max: DEFAULT_WIND_OUT_DELAY_MAX\n};\nvar DEFAULT_WIND_OUT_DURATION_MAX = 10000;\nvar DEFAULT_WIND_OUT_DURATION_MIN = 1000;\nvar DEFAULT_WIND_OUT_DURATION = {\n min: DEFAULT_WIND_OUT_DURATION_MIN,\n max: DEFAULT_WIND_OUT_DURATION_MAX\n};\nvar DEFAULT_WIND_GUSTS_CHANGE_CHANCE = 0.25;\nvar DEFAULT_WIND_GUSTS_ACTIVE = true;\nvar DEFAULT_WIND_GUSTS_OUT = {\n duration: DEFAULT_WIND_OUT_DURATION,\n delay: DEFAULT_WIND_OUT_DELAY\n};\nvar DEFAULT_WIND_GUSTS_IN = {\n additionalStrength: DEFAULT_WIND_IN_ADDITIONAL_STRENGTH,\n duration: DEFAULT_WIND_IN_DURATION,\n delay: DEFAULT_WIND_IN_DELAY\n};\nvar DEFAULT_WIND_GUSTS = {\n active: DEFAULT_WIND_GUSTS_ACTIVE,\n changeChance: DEFAULT_WIND_GUSTS_CHANGE_CHANCE,\n in: DEFAULT_WIND_GUSTS_IN,\n out: DEFAULT_WIND_GUSTS_OUT\n};\nvar DEFAULT_WIND = {\n angle: DEFAULT_WIND_ANGLE,\n strength: DEFAULT_WIND_STRENGTH,\n gusts: DEFAULT_WIND_GUSTS\n};\nvar BASE_LAYER_CONFIG = {\n density: DEFAULT_DENSITY,\n mass: DEFAULT_MASS,\n size: DEFAULT_SIZE,\n sway: DEFAULT_SWAY,\n gravity: DEFAULT_GRAVITY,\n wind: DEFAULT_WIND,\n opacity: DEFAULT_OPACITY\n};\nvar DEFAULT_SIMPLE_LAYER = __assign(__assign({}, BASE_LAYER_CONFIG), { colour: DEFAULT_SNOW_COLOR, mode: 'simple' });\nvar DEFAULT_IMAGE_LAYER = __assign(__assign({}, BASE_LAYER_CONFIG), { mode: 'image', image: DEFAULT_IMAGE, rotate: DEFAULT_ROTATE });\nvar DEFAULT_LAYERS = [];\nvar DEFAULT_BASE_CONFIG = {\n layers: DEFAULT_LAYERS\n};\nfunction getDefaultConfig() {\n return __assign(__assign({}, DEFAULT_BASE_CONFIG), { attachTo: (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getElementOrThrow)(DEFAULT_CONTAINER_ID) });\n}\nvar DEFAULT_USER_CONFIG = __assign(__assign({}, DEFAULT_BASE_CONFIG), { attachTo: DEFAULT_CONTAINER_ID });\n\n\n//# sourceURL=webpack://snowfall/./src/defaults.ts?");
130
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BASE_LAYER_CONFIG: () => (/* binding */ BASE_LAYER_CONFIG),\n/* harmony export */ DEFAULT_AMPLITUDE: () => (/* binding */ DEFAULT_AMPLITUDE),\n/* harmony export */ DEFAULT_BASE_CONFIG: () => (/* binding */ DEFAULT_BASE_CONFIG),\n/* harmony export */ DEFAULT_CONTAINER_ID: () => (/* binding */ DEFAULT_CONTAINER_ID),\n/* harmony export */ DEFAULT_DENSITY: () => (/* binding */ DEFAULT_DENSITY),\n/* harmony export */ DEFAULT_FREQUENCY: () => (/* binding */ DEFAULT_FREQUENCY),\n/* harmony export */ DEFAULT_GRAVITY: () => (/* binding */ DEFAULT_GRAVITY),\n/* harmony export */ DEFAULT_GRAVITY_ANGLE: () => (/* binding */ DEFAULT_GRAVITY_ANGLE),\n/* harmony export */ DEFAULT_GRAVITY_STRENGTH: () => (/* binding */ DEFAULT_GRAVITY_STRENGTH),\n/* harmony export */ DEFAULT_IMAGE: () => (/* binding */ DEFAULT_IMAGE),\n/* harmony export */ DEFAULT_IMAGE_LAYER: () => (/* binding */ DEFAULT_IMAGE_LAYER),\n/* harmony export */ DEFAULT_LAYERS: () => (/* binding */ DEFAULT_LAYERS),\n/* harmony export */ DEFAULT_MASS: () => (/* binding */ DEFAULT_MASS),\n/* harmony export */ DEFAULT_MASS_MAX: () => (/* binding */ DEFAULT_MASS_MAX),\n/* harmony export */ DEFAULT_MASS_MIN: () => (/* binding */ DEFAULT_MASS_MIN),\n/* harmony export */ DEFAULT_MODE: () => (/* binding */ DEFAULT_MODE),\n/* harmony export */ DEFAULT_OPACITY: () => (/* binding */ DEFAULT_OPACITY),\n/* harmony export */ DEFAULT_OPACITY_MAX: () => (/* binding */ DEFAULT_OPACITY_MAX),\n/* harmony export */ DEFAULT_OPACITY_MIN: () => (/* binding */ DEFAULT_OPACITY_MIN),\n/* harmony export */ DEFAULT_ROTATE: () => (/* binding */ DEFAULT_ROTATE),\n/* harmony export */ DEFAULT_SIMPLE_LAYER: () => (/* binding */ DEFAULT_SIMPLE_LAYER),\n/* harmony export */ DEFAULT_SIZE: () => (/* binding */ DEFAULT_SIZE),\n/* harmony export */ DEFAULT_SIZE_MAX: () => (/* binding */ DEFAULT_SIZE_MAX),\n/* harmony export */ DEFAULT_SIZE_MIN: () => (/* binding */ DEFAULT_SIZE_MIN),\n/* harmony export */ DEFAULT_SNOW_COLOR: () => (/* binding */ DEFAULT_SNOW_COLOR),\n/* harmony export */ DEFAULT_SWAY: () => (/* binding */ DEFAULT_SWAY),\n/* harmony export */ DEFAULT_USER_CONFIG: () => (/* binding */ DEFAULT_USER_CONFIG),\n/* harmony export */ DEFAULT_WIND: () => (/* binding */ DEFAULT_WIND),\n/* harmony export */ DEFAULT_WIND_ANGLE: () => (/* binding */ DEFAULT_WIND_ANGLE),\n/* harmony export */ DEFAULT_WIND_GUSTS: () => (/* binding */ DEFAULT_WIND_GUSTS),\n/* harmony export */ DEFAULT_WIND_GUSTS_ACTIVE: () => (/* binding */ DEFAULT_WIND_GUSTS_ACTIVE),\n/* harmony export */ DEFAULT_WIND_GUSTS_CHANGE_CHANCE: () => (/* binding */ DEFAULT_WIND_GUSTS_CHANGE_CHANCE),\n/* harmony export */ DEFAULT_WIND_GUSTS_IN: () => (/* binding */ DEFAULT_WIND_GUSTS_IN),\n/* harmony export */ DEFAULT_WIND_GUSTS_OUT: () => (/* binding */ DEFAULT_WIND_GUSTS_OUT),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH: () => (/* binding */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX: () => (/* binding */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN: () => (/* binding */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DELAY: () => (/* binding */ DEFAULT_WIND_IN_DELAY),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MAX: () => (/* binding */ DEFAULT_WIND_IN_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MIN: () => (/* binding */ DEFAULT_WIND_IN_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DURATION: () => (/* binding */ DEFAULT_WIND_IN_DURATION),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MAX: () => (/* binding */ DEFAULT_WIND_IN_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MIN: () => (/* binding */ DEFAULT_WIND_IN_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY: () => (/* binding */ DEFAULT_WIND_OUT_DELAY),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MAX: () => (/* binding */ DEFAULT_WIND_OUT_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MIN: () => (/* binding */ DEFAULT_WIND_OUT_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION: () => (/* binding */ DEFAULT_WIND_OUT_DURATION),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MAX: () => (/* binding */ DEFAULT_WIND_OUT_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MIN: () => (/* binding */ DEFAULT_WIND_OUT_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_STRENGTH: () => (/* binding */ DEFAULT_WIND_STRENGTH),\n/* harmony export */ getDefaultConfig: () => (/* binding */ getDefaultConfig)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n\n// Basic\nvar DEFAULT_CONTAINER_ID = 'snowfall';\nvar DEFAULT_SNOW_COLOR = '#ffffff';\nvar DEFAULT_DENSITY = 200;\nvar DEFAULT_MASS_MIN = 1;\nvar DEFAULT_MASS_MAX = 3;\nvar DEFAULT_SIZE_MIN = 1;\nvar DEFAULT_SIZE_MAX = 3;\nvar DEFAULT_ROTATE = false;\nvar DEFAULT_MODE = 'simple';\nvar DEFAULT_IMAGE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfpChoFCDEXRwdpAAARX0lEQVR42u1bd1QUd7t+Z/ssuwtb2KU3pVkIEBFRkIiaKCKIikb9NBJNjCamWK7m+6I3iSbRY0xi/GJvsYSooGBBDZao2BBpAkovu/TdpWyb3dmZ3/eH5eaeGAREybnX55w5Z3Z35n2f95l33l9dgJd4iZd4ib4D9vDoUwIvHJu37wONpoU1OWHGAgCAY0d/3S6VyqyLF8x94VxYfSEAAIDCwUmI8/nvPjh3/MVKkq19waNPBKBpChDNxAABAwAA0TRG01RfUHlA4MUD6+J3/2cF+PvgeQrQWxX+ubYUvV4Dlv/zc8jOus7YuHn7u2w2x7e9rS2psaE+VyqTkaPCgrpk4+KNXGjVaNgKR6cgW1vbGRaLpWTp4gU7QkLD6A1ff9GrfHszAzAAwMxmArhcHoPHw4faiSUfu7p7nA0IDN7J4XIjk09m8PLLVACAnnA7grySWkg9+zuPy+VFDn4laKerm/tZsUTyMQ/Hh3J5PKbZTDz205uknwlXswsB0cjeXqFYou/oOO/q7nnBYiZAqayV8fn8SSJb20Q2mzMUABGEiTjX3t62W6tRXy4rvc97I3riZQCAc+knI/38BxJCkWikRCKbx+XxxmEYhlvM5iy9XrdXr9elOjm5tOB8PihrqkcLRKIxLU1N32EMrCViyKBefIY9QHWzHqqadCNUWoKoaGjbjBACr37e8N7iTwAhBGd/vynJuls2o6K+LaNWbTQrNSZTmUqbfi3n3vzyutaS8rrWkqvZhfPK61pPK9VGU63aaC6vaz1/u7B85m9XsiQIIZid+A549fMGhBBUNLRtVmkJoqpJN6K6Wd+3wQMA1LdZoL7NElHfZjFXNXZsQQiBu6fX499nvTUPKhra4GTGVeHN/JLYsjptWk2LwaDUmKwqLWFVaQmrUm0ka1oMhrI67YlbBaVxZy7dELWTCCYnzHhsx93TCxBCUNXYsaW+zWJ+6POZ+fdaEUQIPX6z//heHfp5Nxz6eTcAgO5WQdmJnNtZ513c3IbLFQ7v4Dg/DgCAIIi05qbGXSplzTVPr/7G8aPC/mT/kU300BeG9U4ZeKoAB46kQXNTIxNjMEAms6fmTJ/UY2ehAd6wL+mYsby05HxledndsBEjBwMA3Lx+9UOappsMej1MnzT+mQLafzgVNOoWJk3TIFc4ULOnxXV6faetwIEjaWA0GjnjYuJWR8fE/ejV32egRCrDvtrwQ48Jzp0xGdpaW0Gn6yARIAoBonS6DrKttRUWzZ/dY7vfbNwMvv4DMFc394HjJsRuGhcTt9poNHD2H07tuQAMBgNYLBaTyWD62AiEi1xcXNMv3chdHhgcIkcIQXRsfI8JP8jlPxw9xKSp0wEhBEGvhsiPnvhtuYdX/9MCoeh9BoPhw2KxmQwGs+cC7N7+E4SFjzRVlJcubm3VLkMAtFQqW+frP+BEzr3qqbMT38EtFnPP2T8jLBYLTJoyHc8rqZ3i7euXJpFI1yGEkFajXl5Wcv/DkNAw054d/+65ABczzsIADwXcupGpDujv/J2ytjpab9Bv43C4/vZyxYFXh4Tura6qDLaSJKO3ilJXgGEYWK1WhrK2OmjYiIg9Upn9QTaLPUCn122vqaqMfsXHdeONzMstAd4ucDHjXKe2utQKfPnZCgAA1NLcdC/vTvZHYeERx+zsJMtwPn+qh6fXSIvFcpvJYjEx7EEyPy3teoJHNjEMEEKISVosn7i5eQxlMJlyk9F4QavVbLh25dJlF1d3EgDgmy9Xdc1ud0hMmTAGCMJEsljs80WFBdOamxrfoWnUjvP5sRiGMRGN5EnH00VHTpyDWW/N67Xg585/D5JPZcDRk7+JEEJyDMOYPByPoyiqQ93S/O69orsJPB7vvNFoIKdPGtc9YbtL5ocN34C7hxswmUyaJMlmkrRoAQAoikJsDiduSMiwX61Wa1TwkKHsX4+nP3PwySczIDgklE1R1lFBwSFJHA4njqIoBABAkhatmSCaEADt5+MKP25c3237XRYgdnICIIRg98Ej4uqqmul+/gOPObu4puA4P8hkMp5pbKhfZDDoj+M4HuXo5HwsemL89wpHJ18AwFZ81v0R3Ko16wAAMHu53GfM6+O/Uzg4HefyeKMNBkNqU2PDQpPJmI7j/EBnV7eUAYMGH79fqnxz94EjYoQQjI+J67KfpwowZfosQAjBog+XyvNLlW/39/E7aS9XHORwucPNBJFer1ImFN0tmGa1kttuXc9MVKtb5litZIlQJFzk7uGVnl+q/Dg8MkpWXN0ES1c+/b384ptvoaiyAUZEvCa9W173kZuH1xmRyPZ9i8Vc2tLc9FZu9u25Wo16+52sm9MbGuqmEgRxmsvlDZPJ7A/4Dxp86m553bxFHy2TI4Rg4qSpT/XXaek+dT4TKIriuXt4viUQChfwePgrVqu13WI2n1KrW/aqaqtvyuQKU9TDcf7kaTMg5fAvcO5KloOTk3OiyNZuIZPJdDabiesatfrb/Nw758QSCVGvUgGbzZaMHTfhMgBAxtnTkSRJat3cPaC9rZU36JWg18USyTIOhzuCoqz1ep1ua0111Z7oqOGNsfEJcDI1GQAAkk9lQEd7O89/4OBhUpnsbQ6HG8NisWwJwlRgMhq3VZSV/sxis4mYMeE9ywCJVAoymb2TyNZuJYvFcjHo9TtUyprxqSmH55fcK7q0d+fWx8EDABw7kgQYhkF+TnbjW2/Gr6tXKScYDPq9HA430NHJKSnitaidCgfHoF3bNv9J+IP7dmJyB4egsPCRO+QKhyQ2mx2s1+n2KWtqomdOiVmXm53ViGHY4+ABAKbGjIWjSQeI+8WFv6cmH55fp6od39HRvp3FZDkLBMKV9nKFk0Qq7XkGHDlxDhBCHG8fvzC9Ttd2Lv1EkVRmb13ywbtPTS0AgPSL10GrUXN8/AaMFkuky3g8XiRFUc16nW5byb2i4wGBwYcAAPJysmf6DxwULxSJ3mMwmA5mgrisbmneUFx096JUZm+OeyOyS/42bt4BKmUNK37qmwMFQqFdWen9GxiGWabFvtGl+58LVq5eA7fvlsOx9Avi/FLloqomXYlKS9Dlda3F1U261upmnba8vrVIqTHRlY0dJXklte+fvnBNXNnYDgve/7jviPc2dh04AgCAXbyR61lYUf9DrdporG+zoPo2C6pVG0wFZapNGVezPQEA27LrwAvj9TebFn+GUdHfVYAlKz6D7KJKkEik4vxS5UJPr35n7cSSDy1mc7XFbG6zWMytFoulUiyRLu7n7Xs2r6R2kbun1wt7BTotgsknM8BKWdm+fgPCKYrqyMnOKrC3l5Px0VFdMn76wjXQatQcX/+Bo8USyTIeD39QBPW6bSXFf10ECYK4rOlBETx+5iJo1Gp2YPCQACaTKbpfXJTJYjHJhE6KYKcZwGKxgMPhOApFoh1yhUPGiJGvbXN0dg7fcyiZm3E1G3x8/Z943/rvf4KgV0MwsVgyOCR0+BYHR6cjXC43TK/XJdXWVE14c9L4NU2NDXUPHwDW0txUnzhzylqVUhljNOgPcbncUCcXl6NhIyK2SCTSwQGBwYy1679/oi9fvwFw4XoO7Es6xnVydg0fHhG5Va5wyBCKRDs4XI4ji8XueQYcP3MRDHoDNyAwaIZAIFzIYrNfBQCD0WA4YzDo9+Tn3skMCQ0zDu7vDACddYTM17XqlocdISlRp1L+dUeovY03KCCwSx2h/FIlFBcW8L19/UfY2Ajm2QgE4wHAxmq15ug62rcW5OX+YmNjY548YXTPMiB+fBSUl5WYvfs778vLvROtUbfMJS2WHL6NTbxcrkgdERF52Gq1xh88elJ0p7gKZs2Zx88rqZ3m7eObJpFKv6JpmtRq1EvvF9+NF4ps00ruFxNTJ479a3/RUVBTXUngOH6irOR+fFurdglCYLGzE699MAlTNX3W3Hn8ospGOJx2VkRR1KSgIUN/VTg4ptoIBJNJksxtaW5KLC4siA7wdtlbWJDXafBPzYA/YsOmrTBkaBg0NdaLfPwGjBYIBPN4OD8KwzAGQRCZJpMxlcfDI3Acj6NpmjAaDAcbG+s3jxoWWLpy1Zdo3ZrVj21t2rrniRnw0cK3H1+zes16+HLVCuzyrXxve7lisUAomg0APJPJeMJMEFdwnB/Hw/EIhGjaTJgvtbe37amtqT7v7OLanpZyGL7+4rMuxdWjaZxbBaVw63omPmx4RLidRPKZjY1gJEIIEEKkyWg8r9Vqvr125dJVZxdX8s346D/d3xUBHiH5ZAY01KvYw0aMDLcTi5fhOD4WAGNjGAZ6ve5KW6t2bc7trGvunl7GVSuWwJ3bN7sVS7ebwXXf/Ru4XB54ePZjs9hsFxaLZQ/wYALVoNenZ165NIOyWi/mZGc9MfjuYurEsXDn9i2Sslov3ci8OtOg159mMB7QZrHYci6X5+rs4spycXWH2MkJ3bbfLQFSTp8HPt+GTVosY/wHDj5iL1fsZDCYduqWluMkSZI0TakTZ05pHz8q7NFiSK9g365t8HpkKMyeFttOUbSGJElSo245xmKxbKUy+x1+AwYdNRoNY2xsbNi/Hj/T+wKsXrseAACzt1f4vx4ds0nh6JTC5fEiTUZjsrK2OqamquJbmqat6Llu8/ifXiJN09aqyvKNdSpljMGgP8rD8ZFOTs4pE2In/6hwcPQHAOzT1WueXYCoseOgqKoRQsPCZQXldUtc3d3TBTaC9ywW872W5qbZOdm3EgmTKYfBYNDPL/AnioFhGIM26HU5N69dfVujbvkHaSWLhULhAndPr/T8UuXSsPBI+4IyFUSN7Xwk2KkA8xa8DzevXcX79ffZLBZLvsUAY2g06pWl94pjg/09kg/s3Wl6kdPhT0JqymFToK9bSnlpSZxWq1mJYRgmkco2ePv6/Xj71g387Xc/6LkANE2D1WqlKJoqNeh1W1QqZfSosKANuTm3mzEMg9MnjveMNfYXR08ESD4MGIZBTnZWc0Ls6xuqK8sn6HUdP9E0XWq1ktTTdp91ui4we1ocHDiSZjl7Ku3LR4ujWo0a/rX8456xBYCQ0DBQKByAIAjeI/84zueJxTgMGToMsrO614w9wqdLFwMAIGVtTVFeTvZHXV0cferCyEMDz7yJT+HgCI0N9ZB8MsPWs1//MQKBcD6O4/0QAhgeHrnbZDLu+q9/fX4+IfaNdgdHJ2hqbOiRn4er113m2yvDYdTJ5zFvRANCCLbv/UVaWFE/OzB4SJrCwTEJ5+OjaBphgBDwcHyUVGafFBwSmlZYUT/np137ZQgh+PS/1/YGvecrAIPBACaTSQEAwh4qz2BgkPjOIgAA7MOlKxyLKhveGxQQmC4WS/ZyuJwgk8mYUlVZMYcgTOUmwlRRU10522gwJLPZnCA7sWRPUHBIemFlw8LQsHAnAMA2bdsDDOwhVQwoAIxmMpn0ow7Rs+CZd4hgGAYsFqvCZDRs1Ok6Mk2ggKyCcqhT1Tov+3TVDB4Pn8PlcgdRFKU1GAw/t2o1ezOv/p7Fx/kCZxfXVQAAhfl5F653XE6LGjsuRCgSJfJxfpydnfingFeCFhVWNOxvbKhLupZzT2UAAH1HRzIg1MRiscqhF1qg3mzDMACAJSs+Q8raGvYXX2/YK7K1nWW1UvUGvT5Z19G+PzXlcEE/b1/SaDA8cSwgEAqgsryMPTE+YbBQJJpjYyNIYDGZTu0d7Yc+/+eyRFc3D/K79Wv/uFvmmdGbGyURwIM1+6NJB6h/ff7V2Y72jrK2ttbkX/bvue/t40c9GhFu2rrniQbm/WMaAACpcHTKKS+9nz9jduJOW1vxVNJiqTiadJD64JPlvRb4/3pqLxrdGQ0+b/zNZoVfPF4K0DduURe/e/7ok3+MMBhMwBgMBBjQAAAYg4Gex7aav60AAABNjQ06k9G449G5VCrrKyp9ij7/29xLvMRL/P/GfwC4DUfXnXWOvwAAAABJRU5ErkJggg==';\nvar DEFAULT_OPACITY_MIN = 1;\nvar DEFAULT_OPACITY_MAX = 1;\n// Mass\nvar DEFAULT_MASS = {\n min: DEFAULT_MASS_MIN,\n max: DEFAULT_MASS_MAX\n};\n// Size\nvar DEFAULT_SIZE = {\n min: DEFAULT_SIZE_MIN,\n max: DEFAULT_SIZE_MAX\n};\n// Opacity\nvar DEFAULT_OPACITY = {\n min: DEFAULT_OPACITY_MIN,\n max: DEFAULT_OPACITY_MAX\n};\n// Sway\nvar DEFAULT_AMPLITUDE = 1.0;\nvar DEFAULT_FREQUENCY = 0.02;\nvar DEFAULT_SWAY = {\n frequency: DEFAULT_FREQUENCY,\n amplitude: DEFAULT_AMPLITUDE\n};\n// Gravity\nvar DEFAULT_GRAVITY_ANGLE = 90;\nvar DEFAULT_GRAVITY_STRENGTH = 0.7;\nvar DEFAULT_GRAVITY = {\n angle: DEFAULT_GRAVITY_ANGLE,\n strength: DEFAULT_GRAVITY_STRENGTH\n};\n// Wind\nvar DEFAULT_WIND_ANGLE = 0;\nvar DEFAULT_WIND_STRENGTH = 0;\nvar DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN = 1;\nvar DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX = 3;\nvar DEFAULT_WIND_IN_ADDITIONAL_STRENGTH = {\n min: DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN,\n max: DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX\n};\nvar DEFAULT_WIND_IN_DURATION_MIN = 1000;\nvar DEFAULT_WIND_IN_DURATION_MAX = 3000;\nvar DEFAULT_WIND_IN_DURATION = {\n min: DEFAULT_WIND_IN_DURATION_MIN,\n max: DEFAULT_WIND_IN_DURATION_MAX\n};\nvar DEFAULT_WIND_IN_DELAY_MIN = 1000;\nvar DEFAULT_WIND_IN_DELAY_MAX = 10000;\nvar DEFAULT_WIND_IN_DELAY = {\n min: DEFAULT_WIND_IN_DELAY_MIN,\n max: DEFAULT_WIND_IN_DELAY_MAX\n};\nvar DEFAULT_WIND_OUT_DELAY_MIN = 5000;\nvar DEFAULT_WIND_OUT_DELAY_MAX = 10000;\nvar DEFAULT_WIND_OUT_DELAY = {\n min: DEFAULT_WIND_OUT_DELAY_MIN,\n max: DEFAULT_WIND_OUT_DELAY_MAX\n};\nvar DEFAULT_WIND_OUT_DURATION_MAX = 10000;\nvar DEFAULT_WIND_OUT_DURATION_MIN = 1000;\nvar DEFAULT_WIND_OUT_DURATION = {\n min: DEFAULT_WIND_OUT_DURATION_MIN,\n max: DEFAULT_WIND_OUT_DURATION_MAX\n};\nvar DEFAULT_WIND_GUSTS_CHANGE_CHANCE = 0.25;\nvar DEFAULT_WIND_GUSTS_ACTIVE = true;\nvar DEFAULT_WIND_GUSTS_OUT = {\n duration: DEFAULT_WIND_OUT_DURATION,\n delay: DEFAULT_WIND_OUT_DELAY\n};\nvar DEFAULT_WIND_GUSTS_IN = {\n additionalStrength: DEFAULT_WIND_IN_ADDITIONAL_STRENGTH,\n duration: DEFAULT_WIND_IN_DURATION,\n delay: DEFAULT_WIND_IN_DELAY\n};\nvar DEFAULT_WIND_GUSTS = {\n active: DEFAULT_WIND_GUSTS_ACTIVE,\n changeChance: DEFAULT_WIND_GUSTS_CHANGE_CHANCE,\n in: DEFAULT_WIND_GUSTS_IN,\n out: DEFAULT_WIND_GUSTS_OUT\n};\nvar DEFAULT_WIND = {\n angle: DEFAULT_WIND_ANGLE,\n strength: DEFAULT_WIND_STRENGTH,\n gusts: DEFAULT_WIND_GUSTS\n};\nvar BASE_LAYER_CONFIG = {\n density: DEFAULT_DENSITY,\n mass: DEFAULT_MASS,\n size: DEFAULT_SIZE,\n sway: DEFAULT_SWAY,\n gravity: DEFAULT_GRAVITY,\n wind: DEFAULT_WIND,\n opacity: DEFAULT_OPACITY\n};\nvar DEFAULT_SIMPLE_LAYER = __assign(__assign({}, BASE_LAYER_CONFIG), { colour: DEFAULT_SNOW_COLOR, mode: 'simple' });\nvar DEFAULT_IMAGE_LAYER = __assign(__assign({}, BASE_LAYER_CONFIG), { mode: 'image', image: DEFAULT_IMAGE, rotate: DEFAULT_ROTATE });\nvar DEFAULT_LAYERS = [];\nvar DEFAULT_BASE_CONFIG = {\n layers: DEFAULT_LAYERS\n};\nfunction getDefaultConfig() {\n return __assign(__assign({}, DEFAULT_BASE_CONFIG), { attachTo: (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getElementOrThrow)(DEFAULT_CONTAINER_ID) });\n}\nvar DEFAULT_USER_CONFIG = __assign(__assign({}, DEFAULT_BASE_CONFIG), { attachTo: DEFAULT_CONTAINER_ID });\n\n\n//# sourceURL=webpack://snowfall/./src/defaults.ts?");
131
131
 
132
132
  /***/ }),
133
133
 
@@ -149,7 +149,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
149
149
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
150
150
 
151
151
  "use strict";
152
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BaseLayer: () => (/* binding */ BaseLayer)\n/* harmony export */ });\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @erikwatson/bramble */ \"./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js\");\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _snowflake__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../snowflake */ \"./src/snowflake/move.ts\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math */ \"./src/math.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"./src/utils.ts\");\n/* harmony import */ var _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @tweenjs/tween.js */ \"./node_modules/.pnpm/@tweenjs+tween.js@23.1.3/node_modules/@tweenjs/tween.js/dist/tween.esm.js\");\n\n\n\n\n\nvar BaseLayer = /** @class */ (function () {\n function BaseLayer(config, width, height, strength, durationIn, windDelayIn, durationOut, windDelayOut, changeChance) {\n var _this = this;\n this.snowflakes = [];\n this.paused = false;\n this.originalConfig = config;\n this.config = config;\n this.width = width;\n this.height = height;\n this.windVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(0, 0);\n this.gravityVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(0, 0);\n var originalWindStrength = this.config.wind.strength;\n if (this.config.wind.gusts.active) {\n this.fadeWindIn = new _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.Tween(config)\n .to({ wind: { strength: strength } }, durationIn)\n .easing(_tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.Easing.Quadratic.InOut)\n .delay(windDelayIn)\n .onUpdate(function () {\n _this.setWind(_this.config.wind.angle, _this.config.wind.strength);\n });\n this.fadeWindOut = new _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.Tween(config)\n .to({ wind: { strength: originalWindStrength } }, durationOut)\n .easing(_tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.Easing.Quadratic.Out)\n .delay(windDelayOut)\n .onUpdate(function () {\n _this.setWind(_this.config.wind.angle, _this.config.wind.strength);\n })\n .onComplete(function () {\n if (changeChance < _this.config.wind.gusts.changeChance) {\n var angle = (0,_math__WEBPACK_IMPORTED_MODULE_2__.getDegreesFromVec2)(_this.windVector.getOpposite(_this.windVector));\n _this.setWindAngle(angle);\n }\n });\n }\n }\n BaseLayer.prototype.setAmplitude = function (num) {\n this.config.sway.amplitude = num;\n };\n BaseLayer.prototype.setFrequency = function (freq) {\n this.config.sway.frequency = freq;\n };\n BaseLayer.prototype.setGravity = function (degrees, strength) {\n this.config.gravity.angle = degrees;\n this.config.gravity.strength = strength;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n this.gravityVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.gravityVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setGravityAngle = function (degrees) {\n this.config.gravity.angle = degrees;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n var strength = this.gravityVector.getLength();\n this.gravityVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.gravityVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setGravityStrength = function (strength) {\n this.config.gravity.strength = strength;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n var degrees = (0,_math__WEBPACK_IMPORTED_MODULE_2__.getDegreesFromVec2)(this.gravityVector);\n this.gravityVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.gravityVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setPaused = function (pause) {\n this.paused = pause;\n };\n BaseLayer.prototype.setWind = function (degrees, strength) {\n this.config.wind.angle = degrees;\n this.config.wind.strength = strength;\n this.windVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.windVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setWindAngle = function (degrees) {\n this.config.wind.angle = degrees;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n var strength = this.windVector.getLength();\n this.windVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.windVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setWindStrength = function (strength) {\n this.config.wind.strength = strength;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n var degrees = (0,_math__WEBPACK_IMPORTED_MODULE_2__.getDegreesFromVec2)(this.windVector);\n this.windVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.windVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setGusts = function (gusts) {\n this.config.wind.gusts.active = gusts;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n this.restart();\n };\n BaseLayer.prototype.togglePaused = function () {\n this.paused = !this.paused;\n };\n BaseLayer.prototype.setWindInAdditionalStrengthMin = function (min) {\n this.config.wind.gusts.in.additionalStrength.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInAdditionalStrengthMax = function (max) {\n this.config.wind.gusts.in.additionalStrength.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInDurationMin = function (min) {\n this.config.wind.gusts.in.duration.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInDurationMax = function (max) {\n this.config.wind.gusts.in.duration.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInDelayMin = function (min) {\n this.config.wind.gusts.in.delay.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInDelayMax = function (max) {\n this.config.wind.gusts.in.delay.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutDurationMin = function (min) {\n this.config.wind.gusts.out.duration.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutDurationMax = function (max) {\n this.config.wind.gusts.out.duration.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutDelayMin = function (min) {\n this.config.wind.gusts.out.delay.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutDelayMax = function (max) {\n this.config.wind.gusts.out.delay.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutChangeChance = function (chance) {\n this.config.wind.gusts.changeChance = chance;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.update = function (dt) {\n var _this = this;\n if (this.paused) {\n return;\n }\n var _a = this.config, sway = _a.sway, gravity = _a.gravity, wind = _a.wind;\n this.snowflakes.forEach(function (snowflake) {\n snowflake.time += dt;\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.addWind)(snowflake, wind.angle, wind.strength);\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.addRotation)(snowflake);\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.addGravity)(snowflake, gravity.angle, gravity.strength);\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.addSwayMotion)(snowflake, gravity, sway);\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.screenWrap)(snowflake, _this.width, _this.height, gravity);\n });\n };\n BaseLayer.prototype.render = function (gfx) {\n // Nothing to render\n };\n BaseLayer.prototype.start = function () {\n this.snowflakes = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.makeSnowflakes)((0,_utils__WEBPACK_IMPORTED_MODULE_3__.requiredSnowflakes)(this.width, this.height, this.config.density), this.config, this.width, this.height);\n this.setWind(this.config.wind.angle, this.config.wind.strength);\n this.setGravity(this.config.gravity.angle, this.config.gravity.strength);\n // set up wind gusts\n if (this.config.wind.gusts.active) {\n if (this.fadeWindIn && this.fadeWindOut) {\n this.fadeWindIn.chain(this.fadeWindOut);\n this.fadeWindOut.chain(this.fadeWindIn);\n this.fadeWindIn.start();\n }\n }\n };\n BaseLayer.prototype.pause = function () {\n this.paused = true;\n };\n BaseLayer.prototype.resume = function () {\n this.paused = false;\n };\n BaseLayer.prototype.restart = function () {\n var _a, _b, _c;\n (_a = this.fadeWindIn) === null || _a === void 0 ? void 0 : _a.stopChainedTweens();\n (_b = this.fadeWindOut) === null || _b === void 0 ? void 0 : _b.stopChainedTweens();\n this.setWind(this.originalConfig.wind.angle, this.originalConfig.wind.strength);\n if (this.config.wind.gusts.active) {\n (_c = this.fadeWindIn) === null || _c === void 0 ? void 0 : _c.start();\n }\n this.snowflakes = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.makeSnowflakes)((0,_utils__WEBPACK_IMPORTED_MODULE_3__.requiredSnowflakes)(this.width, this.height, this.config.density), this.config, this.width, this.height);\n };\n BaseLayer.prototype.setDensity = function (density) {\n this.config.density = density;\n this.restart();\n };\n BaseLayer.prototype.setMassMin = function (min) {\n this.config.mass.min = min;\n this.restart();\n };\n BaseLayer.prototype.setMassMax = function (max) {\n this.config.mass.max = max;\n this.restart();\n };\n BaseLayer.prototype.setSizeMin = function (min) {\n this.config.size.min = min;\n this.restart();\n };\n BaseLayer.prototype.setSizeMax = function (max) {\n this.config.size.max = max;\n this.restart();\n };\n return BaseLayer;\n}());\n\n\n\n//# sourceURL=webpack://snowfall/./src/layers/base-layer.ts?");
152
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BaseLayer: () => (/* binding */ BaseLayer)\n/* harmony export */ });\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @erikwatson/bramble */ \"./node_modules/.pnpm/@erikwatson+bramble@0.10.0/node_modules/@erikwatson/bramble/dist/bramble.js\");\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _snowflake__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../snowflake */ \"./src/snowflake/move.ts\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math */ \"./src/math.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"./src/utils.ts\");\n/* harmony import */ var _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @tweenjs/tween.js */ \"./node_modules/.pnpm/@tweenjs+tween.js@23.1.3/node_modules/@tweenjs/tween.js/dist/tween.esm.js\");\n\n\n\n\n\nvar BaseLayer = /** @class */ (function () {\n function BaseLayer(config, width, height, strength, durationIn, windDelayIn, durationOut, windDelayOut, changeChance) {\n var _this = this;\n this.snowflakes = [];\n this.paused = false;\n this.originalConfig = config;\n this.config = config;\n this.width = width;\n this.height = height;\n this.windVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(0, 0);\n this.gravityVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(0, 0);\n var originalWindStrength = this.config.wind.strength;\n if (this.config.wind.gusts.active) {\n this.fadeWindIn = new _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.Tween(config)\n .to({ wind: { strength: strength } }, durationIn)\n .easing(_tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.Easing.Quadratic.InOut)\n .delay(windDelayIn)\n .onUpdate(function () {\n _this.setWind(_this.config.wind.angle, _this.config.wind.strength);\n });\n this.fadeWindOut = new _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.Tween(config)\n .to({ wind: { strength: originalWindStrength } }, durationOut)\n .easing(_tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.Easing.Quadratic.Out)\n .delay(windDelayOut)\n .onUpdate(function () {\n _this.setWind(_this.config.wind.angle, _this.config.wind.strength);\n })\n .onComplete(function () {\n if (changeChance < _this.config.wind.gusts.changeChance) {\n var angle = (0,_math__WEBPACK_IMPORTED_MODULE_2__.getDegreesFromVec2)(_this.windVector.getOpposite(_this.windVector));\n _this.setWindAngle(angle);\n }\n });\n }\n }\n BaseLayer.prototype.setAmplitude = function (num) {\n this.config.sway.amplitude = num;\n };\n BaseLayer.prototype.setFrequency = function (freq) {\n this.config.sway.frequency = freq;\n };\n BaseLayer.prototype.setGravity = function (degrees, strength) {\n this.config.gravity.angle = degrees;\n this.config.gravity.strength = strength;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n this.gravityVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.gravityVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setGravityAngle = function (degrees) {\n this.config.gravity.angle = degrees;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n var strength = this.gravityVector.getLength();\n this.gravityVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.gravityVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setGravityStrength = function (strength) {\n this.config.gravity.strength = strength;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n var degrees = (0,_math__WEBPACK_IMPORTED_MODULE_2__.getDegreesFromVec2)(this.gravityVector);\n this.gravityVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.gravityVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setPaused = function (pause) {\n this.paused = pause;\n };\n BaseLayer.prototype.setWind = function (degrees, strength) {\n this.config.wind.angle = degrees;\n this.config.wind.strength = strength;\n this.windVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.windVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setWindAngle = function (degrees) {\n this.config.wind.angle = degrees;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n var strength = this.windVector.getLength();\n this.windVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.windVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setWindStrength = function (strength) {\n this.config.wind.strength = strength;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n var degrees = (0,_math__WEBPACK_IMPORTED_MODULE_2__.getDegreesFromVec2)(this.windVector);\n this.windVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.windVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setGusts = function (gusts) {\n this.config.wind.gusts.active = gusts;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n this.restart();\n };\n BaseLayer.prototype.togglePaused = function () {\n this.paused = !this.paused;\n };\n BaseLayer.prototype.setWindInAdditionalStrengthMin = function (min) {\n this.config.wind.gusts.in.additionalStrength.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInAdditionalStrengthMax = function (max) {\n this.config.wind.gusts.in.additionalStrength.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInDurationMin = function (min) {\n this.config.wind.gusts.in.duration.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInDurationMax = function (max) {\n this.config.wind.gusts.in.duration.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInDelayMin = function (min) {\n this.config.wind.gusts.in.delay.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInDelayMax = function (max) {\n this.config.wind.gusts.in.delay.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutDurationMin = function (min) {\n this.config.wind.gusts.out.duration.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutDurationMax = function (max) {\n this.config.wind.gusts.out.duration.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutDelayMin = function (min) {\n this.config.wind.gusts.out.delay.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutDelayMax = function (max) {\n this.config.wind.gusts.out.delay.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutChangeChance = function (chance) {\n this.config.wind.gusts.changeChance = chance;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.update = function (dt) {\n var _this = this;\n if (this.paused) {\n return;\n }\n var _a = this.config, sway = _a.sway, gravity = _a.gravity, wind = _a.wind;\n this.snowflakes.forEach(function (snowflake) {\n snowflake.time += dt;\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.addWind)(snowflake, wind.angle, wind.strength);\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.addRotation)(snowflake);\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.addGravity)(snowflake, gravity.angle, gravity.strength);\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.addSwayMotion)(snowflake, gravity, sway);\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.screenWrap)(snowflake, _this.width, _this.height, gravity);\n });\n };\n BaseLayer.prototype.render = function (gfx) {\n // Nothing to render\n };\n BaseLayer.prototype.start = function () {\n this.snowflakes = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.makeSnowflakes)((0,_utils__WEBPACK_IMPORTED_MODULE_3__.requiredSnowflakes)(this.width, this.height, this.config.density), this.config, this.width, this.height);\n this.setWind(this.config.wind.angle, this.config.wind.strength);\n this.setGravity(this.config.gravity.angle, this.config.gravity.strength);\n // set up wind gusts\n if (this.config.wind.gusts.active) {\n if (this.fadeWindIn && this.fadeWindOut) {\n this.fadeWindIn.chain(this.fadeWindOut);\n this.fadeWindOut.chain(this.fadeWindIn);\n this.fadeWindIn.start();\n }\n }\n };\n BaseLayer.prototype.pause = function () {\n this.paused = true;\n };\n BaseLayer.prototype.resume = function () {\n this.paused = false;\n };\n BaseLayer.prototype.restart = function () {\n var _a, _b, _c;\n (_a = this.fadeWindIn) === null || _a === void 0 ? void 0 : _a.stopChainedTweens();\n (_b = this.fadeWindOut) === null || _b === void 0 ? void 0 : _b.stopChainedTweens();\n this.setWind(this.originalConfig.wind.angle, this.originalConfig.wind.strength);\n if (this.config.wind.gusts.active) {\n (_c = this.fadeWindIn) === null || _c === void 0 ? void 0 : _c.start();\n }\n this.snowflakes = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.makeSnowflakes)((0,_utils__WEBPACK_IMPORTED_MODULE_3__.requiredSnowflakes)(this.width, this.height, this.config.density), this.config, this.width, this.height);\n };\n BaseLayer.prototype.setDensity = function (density) {\n this.config.density = density;\n this.restart();\n };\n BaseLayer.prototype.setMassMin = function (min) {\n this.config.mass.min = min;\n this.restart();\n };\n BaseLayer.prototype.setMassMax = function (max) {\n this.config.mass.max = max;\n this.restart();\n };\n BaseLayer.prototype.setSizeMin = function (min) {\n this.config.size.min = min;\n this.restart();\n };\n BaseLayer.prototype.setSizeMax = function (max) {\n this.config.size.max = max;\n this.restart();\n };\n return BaseLayer;\n}());\n\n\n\n//# sourceURL=webpack://snowfall/./src/layers/base-layer.ts?");
153
153
 
154
154
  /***/ }),
155
155
 
@@ -193,7 +193,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
193
193
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
194
194
 
195
195
  "use strict";
196
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ create: () => (/* binding */ create)\n/* harmony export */ });\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @erikwatson/bramble */ \"./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js\");\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config */ \"./src/config.ts\");\n/* harmony import */ var _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @tweenjs/tween.js */ \"./node_modules/.pnpm/@tweenjs+tween.js@23.1.3/node_modules/@tweenjs/tween.js/dist/tween.esm.js\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./math */ \"./src/math.ts\");\n/* harmony import */ var _layers_simple_layer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./layers/simple-layer */ \"./src/layers/simple-layer.ts\");\n/* harmony import */ var _layers_image_layer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./layers/image-layer */ \"./src/layers/image-layer.ts\");\n/* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./defaults */ \"./src/defaults.ts\");\n\n\n\n\n\n\n\nfunction create() {\n var config;\n var layers = [];\n var simulation = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.game.create();\n function commonStart(userConfig) {\n config = (0,_config__WEBPACK_IMPORTED_MODULE_2__.merge)(userConfig);\n if (!config.attachTo) {\n console.error('Unable to start the application, the specified container could not be found.');\n return;\n }\n makeLayers();\n }\n function makeLayers() {\n layers = [];\n config.layers.forEach(function (layer) {\n var strength = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.strength + layer.wind.gusts.in.additionalStrength.min, layer.wind.strength + layer.wind.gusts.in.additionalStrength.max);\n var durationIn = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.gusts.in.delay.min, layer.wind.gusts.in.delay.max);\n var windDelayIn = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.gusts.in.delay.min, layer.wind.gusts.in.delay.max);\n var durationOut = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.gusts.out.duration.min, layer.wind.gusts.out.duration.max);\n var windDelayOut = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.gusts.out.delay.min, layer.wind.gusts.out.delay.max);\n var changeChance = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)();\n var newLayer;\n if (layer.mode === 'simple') {\n newLayer = new _layers_simple_layer__WEBPACK_IMPORTED_MODULE_4__.SimpleLayer(layer, config.attachTo.offsetWidth, config.attachTo.offsetHeight, strength, durationIn, windDelayIn, durationOut, windDelayOut, changeChance);\n }\n else if (layer.mode === 'image') {\n newLayer = new _layers_image_layer__WEBPACK_IMPORTED_MODULE_5__.ImageLayer(layer, config.attachTo.offsetWidth, config.attachTo.offsetHeight, strength, durationIn, windDelayIn, durationOut, windDelayOut, changeChance);\n }\n if (newLayer) {\n layers.push(newLayer);\n newLayer.start();\n }\n });\n }\n function start(userConfig) {\n if (userConfig === void 0) { userConfig = {}; }\n commonStart(userConfig);\n if (!config.attachTo) {\n console.error('Unable to start the application, the specified container could not be found.');\n return;\n }\n window.onresize = onResize;\n simulation.attachTo(config.attachTo);\n simulation.setSize(config.attachTo.offsetWidth, config.attachTo.offsetHeight);\n simulation.setUpdate(function (dt) { return update(dt); });\n simulation.setRender(function (gfx) { return render(gfx); });\n simulation.start();\n }\n function update(dt) {\n _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.update();\n layers.forEach(function (layer) {\n layer.update(dt);\n });\n }\n function render(gfx) {\n gfx.clear();\n layers.forEach(function (layer) {\n layer.render(gfx);\n });\n }\n function onResize() {\n layers.forEach(function (layer) {\n layer.width = config.attachTo.offsetWidth;\n layer.height = config.attachTo.offsetHeight;\n layer.restart();\n });\n restart();\n }\n function restart(newConfig) {\n simulation.setSize(config.attachTo.offsetWidth, config.attachTo.offsetHeight);\n if (newConfig) {\n makeLayers();\n }\n else {\n layers.forEach(function (layer) { return layer.restart(); });\n }\n }\n function setColour(col, layer) {\n if (layers[layer].mode === 'simple') {\n layers[layer].setColour(col);\n }\n else {\n console.error('attempting to set a colour on a layer that does not have a colour property');\n }\n }\n function setDensity(den, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setDensity(den);\n }\n function setAmplitude(num, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setAmplitude(num);\n }\n function setFrequency(freq, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setFrequency(freq);\n }\n function setPaused(pause, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setPaused(pause);\n }\n function togglePaused(layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.togglePaused();\n }\n function setWind(degrees, strength, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWind(degrees, strength);\n }\n function setWindAngle(degrees, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindAngle(degrees);\n }\n function setWindStrength(strength, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindStrength(strength);\n }\n function setGusts(shouldGust, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setGusts(shouldGust);\n }\n function setGravity(degrees, strength, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setGravity(degrees, strength);\n }\n function setGravityAngle(degrees, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setGravityAngle(degrees);\n }\n function setGravityStrength(strength, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setGravityStrength(strength);\n }\n function setWindInAdditionalStrengthMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInAdditionalStrengthMin(min);\n }\n function setWindInAdditionalStrengthMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInAdditionalStrengthMax(max);\n }\n function setWindInDurationMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInDurationMin(min);\n }\n function setWindInDurationMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInDurationMax(max);\n }\n function setWindInDelayMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInDelayMin(min);\n }\n function setWindInDelayMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInDelayMax(max);\n }\n function setWindOutDurationMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutDurationMin(min);\n }\n function setWindOutDurationMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutDurationMax(max);\n }\n function setWindOutDelayMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutDelayMin(min);\n }\n function setWindOutDelayMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutDelayMax(max);\n }\n function setWindOutChangeChance(chance, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutChangeChance(chance);\n }\n function setMassMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setMassMin(min);\n }\n function setMassMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setMassMax(max);\n }\n function setSizeMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setSizeMin(min);\n }\n function setSizeMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setSizeMax(max);\n }\n return {\n start: start,\n setAmplitude: setAmplitude,\n setDensity: setDensity,\n setFrequency: setFrequency,\n setGravity: setGravity,\n setGravityAngle: setGravityAngle,\n setGravityStrength: setGravityStrength,\n setPaused: setPaused,\n setWind: setWind,\n setWindAngle: setWindAngle,\n setWindStrength: setWindStrength,\n setGusts: setGusts,\n togglePaused: togglePaused,\n setWindInAdditionalStrengthMin: setWindInAdditionalStrengthMin,\n setWindInAdditionalStrengthMax: setWindInAdditionalStrengthMax,\n setWindInDurationMin: setWindInDurationMin,\n setWindInDurationMax: setWindInDurationMax,\n setWindInDelayMin: setWindInDelayMin,\n setWindInDelayMax: setWindInDelayMax,\n setWindOutDurationMin: setWindOutDurationMin,\n setWindOutDurationMax: setWindOutDurationMax,\n setWindOutDelayMin: setWindOutDelayMin,\n setWindOutDelayMax: setWindOutDelayMax,\n setWindOutChangeChance: setWindOutChangeChance,\n setColour: setColour,\n setMassMin: setMassMin,\n setMassMax: setMassMax,\n setSizeMin: setSizeMin,\n setSizeMax: setSizeMax,\n restart: function (userConfig) {\n var config = userConfig ? (0,_config__WEBPACK_IMPORTED_MODULE_2__.merge)(userConfig) : userConfig;\n restart(config);\n },\n stop: function () {\n config = (0,_config__WEBPACK_IMPORTED_MODULE_2__.merge)(_defaults__WEBPACK_IMPORTED_MODULE_6__.DEFAULT_USER_CONFIG); // prbably best to wipe the user settings here\n layers = [];\n // simulation.stop()\n simulation.canvas.remove();\n }\n };\n}\n\n\n//# sourceURL=webpack://snowfall/./src/simulation.ts?");
196
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ create: () => (/* binding */ create)\n/* harmony export */ });\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @erikwatson/bramble */ \"./node_modules/.pnpm/@erikwatson+bramble@0.10.0/node_modules/@erikwatson/bramble/dist/bramble.js\");\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config */ \"./src/config.ts\");\n/* harmony import */ var _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @tweenjs/tween.js */ \"./node_modules/.pnpm/@tweenjs+tween.js@23.1.3/node_modules/@tweenjs/tween.js/dist/tween.esm.js\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./math */ \"./src/math.ts\");\n/* harmony import */ var _layers_simple_layer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./layers/simple-layer */ \"./src/layers/simple-layer.ts\");\n/* harmony import */ var _layers_image_layer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./layers/image-layer */ \"./src/layers/image-layer.ts\");\n/* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./defaults */ \"./src/defaults.ts\");\n\n\n\n\n\n\n\nfunction create() {\n var config;\n var layers = [];\n var simulation = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.game.create();\n function commonStart(userConfig) {\n config = (0,_config__WEBPACK_IMPORTED_MODULE_2__.merge)(userConfig);\n if (!config.attachTo) {\n console.error('Unable to start the application, the specified container could not be found.');\n return;\n }\n makeLayers();\n }\n function makeLayers() {\n layers = [];\n config.layers.forEach(function (layer) {\n var strength = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.strength + layer.wind.gusts.in.additionalStrength.min, layer.wind.strength + layer.wind.gusts.in.additionalStrength.max);\n var durationIn = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.gusts.in.delay.min, layer.wind.gusts.in.delay.max);\n var windDelayIn = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.gusts.in.delay.min, layer.wind.gusts.in.delay.max);\n var durationOut = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.gusts.out.duration.min, layer.wind.gusts.out.duration.max);\n var windDelayOut = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.gusts.out.delay.min, layer.wind.gusts.out.delay.max);\n var changeChance = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)();\n var newLayer;\n if (layer.mode === 'simple') {\n newLayer = new _layers_simple_layer__WEBPACK_IMPORTED_MODULE_4__.SimpleLayer(layer, config.attachTo.offsetWidth, config.attachTo.offsetHeight, strength, durationIn, windDelayIn, durationOut, windDelayOut, changeChance);\n }\n else if (layer.mode === 'image') {\n newLayer = new _layers_image_layer__WEBPACK_IMPORTED_MODULE_5__.ImageLayer(layer, config.attachTo.offsetWidth, config.attachTo.offsetHeight, strength, durationIn, windDelayIn, durationOut, windDelayOut, changeChance);\n }\n if (newLayer) {\n layers.push(newLayer);\n newLayer.start();\n }\n });\n }\n function start(userConfig) {\n if (userConfig === void 0) { userConfig = {}; }\n commonStart(userConfig);\n if (!config.attachTo) {\n console.error('Unable to start the application, the specified container could not be found.');\n return;\n }\n window.onresize = onResize;\n simulation.attachTo(config.attachTo);\n simulation.setSize(config.attachTo.offsetWidth, config.attachTo.offsetHeight);\n simulation.setUpdate(function (options) { return update(options.dt); });\n simulation.setRender(function (options) { return render(options.gfx); });\n simulation.start();\n }\n function update(dt) {\n _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.update();\n layers.forEach(function (layer) {\n layer.update(dt);\n });\n }\n function render(gfx) {\n gfx.clear();\n layers.forEach(function (layer) {\n layer.render(gfx);\n });\n }\n function onResize() {\n layers.forEach(function (layer) {\n layer.width = config.attachTo.offsetWidth;\n layer.height = config.attachTo.offsetHeight;\n layer.restart();\n });\n restart();\n }\n function restart(newConfig) {\n simulation.setSize(config.attachTo.offsetWidth, config.attachTo.offsetHeight);\n if (newConfig) {\n makeLayers();\n }\n else {\n layers.forEach(function (layer) { return layer.restart(); });\n }\n }\n function setColour(col, layer) {\n if (layers[layer].mode === 'simple') {\n layers[layer].setColour(col);\n }\n else {\n console.error('attempting to set a colour on a layer that does not have a colour property');\n }\n }\n function setDensity(den, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setDensity(den);\n }\n function setAmplitude(num, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setAmplitude(num);\n }\n function setFrequency(freq, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setFrequency(freq);\n }\n function setPaused(pause, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setPaused(pause);\n }\n function togglePaused(layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.togglePaused();\n }\n function setWind(degrees, strength, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWind(degrees, strength);\n }\n function setWindAngle(degrees, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindAngle(degrees);\n }\n function setWindStrength(strength, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindStrength(strength);\n }\n function setGusts(shouldGust, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setGusts(shouldGust);\n }\n function setGravity(degrees, strength, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setGravity(degrees, strength);\n }\n function setGravityAngle(degrees, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setGravityAngle(degrees);\n }\n function setGravityStrength(strength, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setGravityStrength(strength);\n }\n function setWindInAdditionalStrengthMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInAdditionalStrengthMin(min);\n }\n function setWindInAdditionalStrengthMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInAdditionalStrengthMax(max);\n }\n function setWindInDurationMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInDurationMin(min);\n }\n function setWindInDurationMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInDurationMax(max);\n }\n function setWindInDelayMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInDelayMin(min);\n }\n function setWindInDelayMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInDelayMax(max);\n }\n function setWindOutDurationMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutDurationMin(min);\n }\n function setWindOutDurationMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutDurationMax(max);\n }\n function setWindOutDelayMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutDelayMin(min);\n }\n function setWindOutDelayMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutDelayMax(max);\n }\n function setWindOutChangeChance(chance, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutChangeChance(chance);\n }\n function setMassMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setMassMin(min);\n }\n function setMassMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setMassMax(max);\n }\n function setSizeMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setSizeMin(min);\n }\n function setSizeMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setSizeMax(max);\n }\n return {\n start: start,\n setAmplitude: setAmplitude,\n setDensity: setDensity,\n setFrequency: setFrequency,\n setGravity: setGravity,\n setGravityAngle: setGravityAngle,\n setGravityStrength: setGravityStrength,\n setPaused: setPaused,\n setWind: setWind,\n setWindAngle: setWindAngle,\n setWindStrength: setWindStrength,\n setGusts: setGusts,\n togglePaused: togglePaused,\n setWindInAdditionalStrengthMin: setWindInAdditionalStrengthMin,\n setWindInAdditionalStrengthMax: setWindInAdditionalStrengthMax,\n setWindInDurationMin: setWindInDurationMin,\n setWindInDurationMax: setWindInDurationMax,\n setWindInDelayMin: setWindInDelayMin,\n setWindInDelayMax: setWindInDelayMax,\n setWindOutDurationMin: setWindOutDurationMin,\n setWindOutDurationMax: setWindOutDurationMax,\n setWindOutDelayMin: setWindOutDelayMin,\n setWindOutDelayMax: setWindOutDelayMax,\n setWindOutChangeChance: setWindOutChangeChance,\n setColour: setColour,\n setMassMin: setMassMin,\n setMassMax: setMassMax,\n setSizeMin: setSizeMin,\n setSizeMax: setSizeMax,\n restart: function (userConfig) {\n var config = userConfig ? (0,_config__WEBPACK_IMPORTED_MODULE_2__.merge)(userConfig) : userConfig;\n restart(config);\n },\n stop: function () {\n config = (0,_config__WEBPACK_IMPORTED_MODULE_2__.merge)(_defaults__WEBPACK_IMPORTED_MODULE_6__.DEFAULT_USER_CONFIG); // prbably best to wipe the user settings here\n layers = [];\n simulation.stop();\n simulation.canvas.remove();\n }\n };\n}\n\n\n//# sourceURL=webpack://snowfall/./src/simulation.ts?");
197
197
 
198
198
  /***/ }),
199
199
 
@@ -204,7 +204,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
204
204
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
205
205
 
206
206
  "use strict";
207
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BASE_LAYER_CONFIG: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.BASE_LAYER_CONFIG),\n/* harmony export */ DEFAULT_AMPLITUDE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_AMPLITUDE),\n/* harmony export */ DEFAULT_BASE_CONFIG: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_BASE_CONFIG),\n/* harmony export */ DEFAULT_CONTAINER_ID: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_CONTAINER_ID),\n/* harmony export */ DEFAULT_DENSITY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_DENSITY),\n/* harmony export */ DEFAULT_FREQUENCY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_FREQUENCY),\n/* harmony export */ DEFAULT_GRAVITY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_GRAVITY),\n/* harmony export */ DEFAULT_GRAVITY_ANGLE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_GRAVITY_ANGLE),\n/* harmony export */ DEFAULT_GRAVITY_STRENGTH: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_GRAVITY_STRENGTH),\n/* harmony export */ DEFAULT_IMAGE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_IMAGE),\n/* harmony export */ DEFAULT_IMAGE_LAYER: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_IMAGE_LAYER),\n/* harmony export */ DEFAULT_LAYERS: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_LAYERS),\n/* harmony export */ DEFAULT_MASS: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MASS),\n/* harmony export */ DEFAULT_MASS_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MASS_MAX),\n/* harmony export */ DEFAULT_MASS_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MASS_MIN),\n/* harmony export */ DEFAULT_MODE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MODE),\n/* harmony export */ DEFAULT_OPACITY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_OPACITY),\n/* harmony export */ DEFAULT_OPACITY_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_OPACITY_MAX),\n/* harmony export */ DEFAULT_OPACITY_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_OPACITY_MIN),\n/* harmony export */ DEFAULT_ROTATE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_ROTATE),\n/* harmony export */ DEFAULT_SIMPLE_LAYER: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SIMPLE_LAYER),\n/* harmony export */ DEFAULT_SIZE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SIZE),\n/* harmony export */ DEFAULT_SIZE_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SIZE_MAX),\n/* harmony export */ DEFAULT_SIZE_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SIZE_MIN),\n/* harmony export */ DEFAULT_SNOW_COLOR: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SNOW_COLOR),\n/* harmony export */ DEFAULT_SWAY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SWAY),\n/* harmony export */ DEFAULT_USER_CONFIG: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_USER_CONFIG),\n/* harmony export */ DEFAULT_WIND: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND),\n/* harmony export */ DEFAULT_WIND_ANGLE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_ANGLE),\n/* harmony export */ DEFAULT_WIND_GUSTS: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS),\n/* harmony export */ DEFAULT_WIND_GUSTS_ACTIVE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS_ACTIVE),\n/* harmony export */ DEFAULT_WIND_GUSTS_CHANGE_CHANCE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS_CHANGE_CHANCE),\n/* harmony export */ DEFAULT_WIND_GUSTS_IN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS_IN),\n/* harmony export */ DEFAULT_WIND_GUSTS_OUT: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS_OUT),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DELAY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DELAY),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DURATION: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DURATION),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DELAY),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DURATION),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_STRENGTH: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_STRENGTH),\n/* harmony export */ clone: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_1__.clone),\n/* harmony export */ diff: () => (/* reexport safe */ _config__WEBPACK_IMPORTED_MODULE_2__.diff),\n/* harmony export */ getDefaultConfig: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.getDefaultConfig),\n/* harmony export */ isSimpleLayer: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_1__.isSimpleLayer),\n/* harmony export */ restart: () => (/* binding */ restart),\n/* harmony export */ schedule: () => (/* binding */ schedule),\n/* harmony export */ setAmplitude: () => (/* binding */ setAmplitude),\n/* harmony export */ setColour: () => (/* binding */ setColour),\n/* harmony export */ setDensity: () => (/* binding */ setDensity),\n/* harmony export */ setFrequency: () => (/* binding */ setFrequency),\n/* harmony export */ setGravity: () => (/* binding */ setGravity),\n/* harmony export */ setGravityAngle: () => (/* binding */ setGravityAngle),\n/* harmony export */ setGravityStrength: () => (/* binding */ setGravityStrength),\n/* harmony export */ setGusts: () => (/* binding */ setGusts),\n/* harmony export */ setMassMax: () => (/* binding */ setMassMax),\n/* harmony export */ setMassMin: () => (/* binding */ setMassMin),\n/* harmony export */ setPaused: () => (/* binding */ setPaused),\n/* harmony export */ setSizeMax: () => (/* binding */ setSizeMax),\n/* harmony export */ setSizeMin: () => (/* binding */ setSizeMin),\n/* harmony export */ setWind: () => (/* binding */ setWind),\n/* harmony export */ setWindAngle: () => (/* binding */ setWindAngle),\n/* harmony export */ setWindInAdditionalStrengthMax: () => (/* binding */ setWindInAdditionalStrengthMax),\n/* harmony export */ setWindInAdditionalStrengthMin: () => (/* binding */ setWindInAdditionalStrengthMin),\n/* harmony export */ setWindInDelayMax: () => (/* binding */ setWindInDelayMax),\n/* harmony export */ setWindInDelayMin: () => (/* binding */ setWindInDelayMin),\n/* harmony export */ setWindInDurationMax: () => (/* binding */ setWindInDurationMax),\n/* harmony export */ setWindInDurationMin: () => (/* binding */ setWindInDurationMin),\n/* harmony export */ setWindOutChangeChance: () => (/* binding */ setWindOutChangeChance),\n/* harmony export */ setWindOutDelayMax: () => (/* binding */ setWindOutDelayMax),\n/* harmony export */ setWindOutDelayMin: () => (/* binding */ setWindOutDelayMin),\n/* harmony export */ setWindOutDurationMax: () => (/* binding */ setWindOutDurationMax),\n/* harmony export */ setWindOutDurationMin: () => (/* binding */ setWindOutDurationMin),\n/* harmony export */ setWindStrength: () => (/* binding */ setWindStrength),\n/* harmony export */ start: () => (/* binding */ start),\n/* harmony export */ stop: () => (/* binding */ stop),\n/* harmony export */ togglePaused: () => (/* binding */ togglePaused)\n/* harmony export */ });\n/* harmony import */ var _simulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./simulation */ \"./src/simulation.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config */ \"./src/config.ts\");\n/* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./defaults */ \"./src/defaults.ts\");\n/**\n * @module snowfall\n *\n * Lightweight, high-performance snowfall effect for the web.\n * Fully configurable, supports multiple layers, wind, gusts, and scheduled activation.\n *\n * Stay cool ☃️\n */\n\n\nvar simulation;\nfunction ensureRunning() {\n if (!simulation) {\n throw new Error('Snowfall simulation not started. Call snowfall.start() first.');\n }\n}\n/**\n * Starts the Snowfall simulation.\n *\n * @param {UserConfig} [config] - A config, possibly from the [Visual Config Editor](https://erikwatson.github.io/snowfall-editor/).\n */\nfunction start(config) {\n if (config === void 0) { config = {}; }\n try {\n if (!simulation) {\n simulation = _simulation__WEBPACK_IMPORTED_MODULE_0__.create();\n }\n simulation.start(config);\n }\n catch (error) {\n console.error(error);\n }\n}\nfunction restart(config) {\n if (config === void 0) { config = {}; }\n stop();\n start(config);\n}\nfunction stop() {\n simulation === null || simulation === void 0 ? void 0 : simulation.stop();\n simulation = undefined;\n}\n/**\n * Starts the Snowfall simulation when today's date falls within the date range in the schedule.\n *\n * @param {UserSchedule} userSchedule - A schedule config, defining when the simulation should run from, and when the simulation should run to.\n * @param {UserConfig} [config] - A config, possibly from the [Visual Config Editor](https://erikwatson.github.io/snowfall-editor/).\n */\nfunction schedule(userSchedule, config) {\n if (config === void 0) { config = {}; }\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.withinSchedule)(userSchedule)) {\n stop();\n start(config);\n }\n}\n/**\n * Set the colour of the Snowflakes\n * @param {string} colour - The colour to set\n * @param {number} layer - The layer to set the colour for\n */\nfunction setColour(colour, layer) {\n ensureRunning();\n simulation.setColour(colour, layer);\n}\n/**\n * Set the density of the Snowflakes. This is the number of snowflakes on screen\n * at a resolution of 1280 x 1080, but this number is scaled up and down at\n * higher and lower resolutions respectively to give a consistent look when\n * resizing.\n *\n * Setting this restarts the simulation.\n *\n * @param {number} density - A number representing the density of snowflakes.\n * @param {number} layer - The layer to set the density for\n */\nfunction setDensity(density, layer) {\n ensureRunning();\n simulation.setDensity(density, layer);\n}\n/**\n * Set the Amplitude of the sway of the Snowflakes\n *\n * @param {number} amplitude - The Amplitude to set\n * @param {number} layer - The layer to set the amplitude for\n */\nfunction setAmplitude(amplitude, layer) {\n ensureRunning();\n simulation.setAmplitude(amplitude, layer);\n}\n/**\n * Set the Frequency of the sway of the Snowflakes.\n *\n * @param {number} frequency - The frequency to set\n * @param {number} layer - The layer to set the frequency for\n */\nfunction setFrequency(frequency, layer) {\n ensureRunning();\n simulation.setFrequency(frequency, layer);\n}\n/**\n * Pauses or resumes a specific layer.\n *\n * @param {boolean} pause - Pass true to pause the layer, false to resume\n * @param {number} layer - The layer index\n */\nfunction setPaused(pause, layer) {\n ensureRunning();\n simulation.setPaused(pause, layer);\n}\n/**\n * Pause/unpause the snowfall update loop for a specific layer.\n *\n * @param layer - The layer index to toggle\n */\nfunction togglePaused(layer) {\n ensureRunning();\n simulation.togglePaused(layer);\n}\n/**\n * Set the angle and strength of the wind in the simulation.\n *\n * @param {number} angle - The angle of the wind, in degrees\n * @param {number} strength - The strength of the wind\n * @param {number} layer - The layer to set the wind for\n */\nfunction setWind(angle, strength, layer) {\n ensureRunning();\n simulation.setWind(angle, strength, layer);\n}\n/**\n * Set the angle of the wind in the simulation.\n *\n * @param {number} angle - The angle of the wind, in degrees\n * @param {number} layer - The layer to set the wind angle for\n */\nfunction setWindAngle(angle, layer) {\n ensureRunning();\n simulation.setWindAngle(angle, layer);\n}\n/**\n * Set the strength of the wind in the simulation.\n *\n * @param {number} strength - The strength of the wind\n * @param {number} layer - The layer to apply the wind strength to\n */\nfunction setWindStrength(strength, layer) {\n ensureRunning();\n simulation.setWindStrength(strength, layer);\n}\n/**\n * Set the wind gusts in the simulation.\n * This restarts the simulation.\n *\n * @param {boolean} gusts - Should there be gusts in the wind?\n * @param {number} layer - The layer to set the gusts for\n */\nfunction setGusts(gusts, layer) {\n ensureRunning();\n simulation.setGusts(gusts, layer);\n}\n/**\n * Set the angle and strength of gravity in the simulation.\n *\n * @param {number} angle - The angle of gravity, in degrees\n * @param {number} strength - The strength of the gravity\n * @param {number} layer - The layer to set the gravity for\n */\nfunction setGravity(angle, strength, layer) {\n ensureRunning();\n simulation.setGravity(angle, strength, layer);\n}\n/**\n * Set the angle of gravity in the simulation.\n *\n * @param {number} angle - The angle of gravity, in degrees\n * @param {number} layer - The layer to set the gravity angle for\n */\nfunction setGravityAngle(angle, layer) {\n ensureRunning();\n simulation.setGravityAngle(angle, layer);\n}\n/**\n * Set the strength of gravity in the simulation.\n *\n * @param {number} strength - The strength of the gravity\n * @param {number} layer - The layer to set the gravity strength for\n */\nfunction setGravityStrength(strength, layer) {\n ensureRunning();\n simulation.setGravityStrength(strength, layer);\n}\n/**\n * Set the minimum additional strength of the wind when it's coming in.\n *\n * @param {number} min - The minimum additional strength of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in additional strength min for\n * @returns {void}\n */\nfunction setWindInAdditionalStrengthMin(min, layer) {\n ensureRunning();\n simulation.setWindInAdditionalStrengthMin(min, layer);\n}\n/**\n * Set the maximum additional strength of the wind when it's coming in.\n *\n * @param {number} max - The maximum additional strength of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in additional strength max for\n * @returns {void}\n */\nfunction setWindInAdditionalStrengthMax(max, layer) {\n ensureRunning();\n simulation.setWindInAdditionalStrengthMax(max, layer);\n}\n/**\n * Set the minimum duration of the wind when it's coming in.\n *\n * @param {number} min - The minimum duration of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in duration min for\n * @returns {void}\n */\nfunction setWindInDurationMin(min, layer) {\n ensureRunning();\n simulation.setWindInDurationMin(min, layer);\n}\n/**\n * Set the maximum duration of the wind when it's coming in.\n *\n * @param {number} max - The maximum duration of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in duration max for\n * @returns {void}\n */\nfunction setWindInDurationMax(max, layer) {\n ensureRunning();\n simulation.setWindInDurationMax(max, layer);\n}\n/**\n * Set the minimum delay of the wind when it's coming in.\n *\n * @param {number} min - The minimum delay of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in delay min for\n * @returns {void}\n */\nfunction setWindInDelayMin(min, layer) {\n ensureRunning();\n simulation.setWindInDelayMin(min, layer);\n}\n/**\n * Set the maximum delay of the wind when it's coming in.\n *\n * @param {number} max - The maximum delay of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in delay max for\n * @returns {void}\n */\nfunction setWindInDelayMax(max, layer) {\n ensureRunning();\n simulation.setWindInDelayMax(max, layer);\n}\n/**\n * Set the minimum duration of the wind when it's going out.\n *\n * @param {number} min - The minimum duration of the wind when it's going out.\n * @param {number} layer - The layer to set the wind out duration min for\n * @returns {void}\n */\nfunction setWindOutDurationMin(min, layer) {\n ensureRunning();\n simulation.setWindOutDurationMin(min, layer);\n}\n/**\n * Set the maximum duration of the wind when it's going out.\n *\n * @param {number} max - The maximum duration of the wind when it's going out.\n * @param {number} layer - The layer to set the wind out duration max for\n * @returns {void}\n */\nfunction setWindOutDurationMax(max, layer) {\n ensureRunning();\n simulation.setWindOutDurationMax(max, layer);\n}\n/**\n * Set the minimum delay of the wind when it's going out.\n *\n * @param {number} min - The minimum delay of the wind when it's going out.\n * @param {number} layer - The layer to set the wind out delay min for\n * @returns {void}\n */\nfunction setWindOutDelayMin(min, layer) {\n ensureRunning();\n simulation.setWindOutDelayMin(min, layer);\n}\n/**\n * Set the maximum delay of the wind when it's going out.\n *\n * @param {number} max - The maximum delay of the wind when it's going out.\n * @param {number} layer - The layer to set the wind out delay max for\n * @returns {void}\n */\nfunction setWindOutDelayMax(max, layer) {\n ensureRunning();\n simulation.setWindOutDelayMax(max, layer);\n}\n/**\n * Set the chance of the wind changing direction after a gust.\n *\n * @param {number} chance - The chance of the wind changing direction after a gust.\n * @param {number} layer - The layer to set the wind out change chance for\n * @returns {void}\n */\nfunction setWindOutChangeChance(chance, layer) {\n ensureRunning();\n simulation.setWindOutChangeChance(chance, layer);\n}\n/**\n * Set the minimum mass of the snowflakes.\n *\n * @param {number} min - The minimum mass of the snowflakes.\n * @param {number} layer - The layer to set the mass min for\n */\nfunction setMassMin(min, layer) {\n ensureRunning();\n simulation.setMassMin(min, layer);\n}\n/**\n * Set the maximum mass of the snowflakes.\n *\n * @param {number} max - The maximum mass of the snowflakes.\n * @param {number} layer - The layer to set the mass max for\n */\nfunction setMassMax(max, layer) {\n ensureRunning();\n simulation.setMassMax(max, layer);\n}\n/**\n * Set the minimum size of the snowflakes.\n *\n * @param {number} min - The minimum rendered size of the snowflakes.\n * @param {number} layer - The layer to set the rendered size min for\n */\nfunction setSizeMin(min, layer) {\n ensureRunning();\n simulation.setSizeMin(min, layer);\n}\n/**\n * Set the maximum size of the snowflakes.\n *\n * @param {number} max - The maximum rendered size of the snowflakes.\n * @param {number} layer - The layer to set the rendered size max for\n */\nfunction setSizeMax(max, layer) {\n ensureRunning();\n simulation.setSizeMax(max, layer);\n}\n\n\n\n\n\n\n//# sourceURL=webpack://snowfall/./src/snowfall.ts?");
207
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BASE_LAYER_CONFIG: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.BASE_LAYER_CONFIG),\n/* harmony export */ DEFAULT_AMPLITUDE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_AMPLITUDE),\n/* harmony export */ DEFAULT_BASE_CONFIG: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_BASE_CONFIG),\n/* harmony export */ DEFAULT_CONTAINER_ID: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_CONTAINER_ID),\n/* harmony export */ DEFAULT_DENSITY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_DENSITY),\n/* harmony export */ DEFAULT_FREQUENCY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_FREQUENCY),\n/* harmony export */ DEFAULT_GRAVITY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_GRAVITY),\n/* harmony export */ DEFAULT_GRAVITY_ANGLE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_GRAVITY_ANGLE),\n/* harmony export */ DEFAULT_GRAVITY_STRENGTH: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_GRAVITY_STRENGTH),\n/* harmony export */ DEFAULT_IMAGE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_IMAGE),\n/* harmony export */ DEFAULT_IMAGE_LAYER: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_IMAGE_LAYER),\n/* harmony export */ DEFAULT_LAYERS: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_LAYERS),\n/* harmony export */ DEFAULT_MASS: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MASS),\n/* harmony export */ DEFAULT_MASS_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MASS_MAX),\n/* harmony export */ DEFAULT_MASS_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MASS_MIN),\n/* harmony export */ DEFAULT_MODE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MODE),\n/* harmony export */ DEFAULT_OPACITY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_OPACITY),\n/* harmony export */ DEFAULT_OPACITY_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_OPACITY_MAX),\n/* harmony export */ DEFAULT_OPACITY_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_OPACITY_MIN),\n/* harmony export */ DEFAULT_ROTATE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_ROTATE),\n/* harmony export */ DEFAULT_SIMPLE_LAYER: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SIMPLE_LAYER),\n/* harmony export */ DEFAULT_SIZE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SIZE),\n/* harmony export */ DEFAULT_SIZE_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SIZE_MAX),\n/* harmony export */ DEFAULT_SIZE_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SIZE_MIN),\n/* harmony export */ DEFAULT_SNOW_COLOR: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SNOW_COLOR),\n/* harmony export */ DEFAULT_SWAY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SWAY),\n/* harmony export */ DEFAULT_USER_CONFIG: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_USER_CONFIG),\n/* harmony export */ DEFAULT_WIND: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND),\n/* harmony export */ DEFAULT_WIND_ANGLE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_ANGLE),\n/* harmony export */ DEFAULT_WIND_GUSTS: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS),\n/* harmony export */ DEFAULT_WIND_GUSTS_ACTIVE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS_ACTIVE),\n/* harmony export */ DEFAULT_WIND_GUSTS_CHANGE_CHANCE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS_CHANGE_CHANCE),\n/* harmony export */ DEFAULT_WIND_GUSTS_IN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS_IN),\n/* harmony export */ DEFAULT_WIND_GUSTS_OUT: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS_OUT),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DELAY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DELAY),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DURATION: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DURATION),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DELAY),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DURATION),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_STRENGTH: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_STRENGTH),\n/* harmony export */ clone: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_1__.clone),\n/* harmony export */ diff: () => (/* reexport safe */ _config__WEBPACK_IMPORTED_MODULE_2__.diff),\n/* harmony export */ getDefaultConfig: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.getDefaultConfig),\n/* harmony export */ isSimpleLayer: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_1__.isSimpleLayer),\n/* harmony export */ restart: () => (/* binding */ restart),\n/* harmony export */ schedule: () => (/* binding */ schedule),\n/* harmony export */ setAmplitude: () => (/* binding */ setAmplitude),\n/* harmony export */ setColour: () => (/* binding */ setColour),\n/* harmony export */ setDensity: () => (/* binding */ setDensity),\n/* harmony export */ setFrequency: () => (/* binding */ setFrequency),\n/* harmony export */ setGravity: () => (/* binding */ setGravity),\n/* harmony export */ setGravityAngle: () => (/* binding */ setGravityAngle),\n/* harmony export */ setGravityStrength: () => (/* binding */ setGravityStrength),\n/* harmony export */ setGusts: () => (/* binding */ setGusts),\n/* harmony export */ setMassMax: () => (/* binding */ setMassMax),\n/* harmony export */ setMassMin: () => (/* binding */ setMassMin),\n/* harmony export */ setPaused: () => (/* binding */ setPaused),\n/* harmony export */ setSizeMax: () => (/* binding */ setSizeMax),\n/* harmony export */ setSizeMin: () => (/* binding */ setSizeMin),\n/* harmony export */ setWind: () => (/* binding */ setWind),\n/* harmony export */ setWindAngle: () => (/* binding */ setWindAngle),\n/* harmony export */ setWindInAdditionalStrengthMax: () => (/* binding */ setWindInAdditionalStrengthMax),\n/* harmony export */ setWindInAdditionalStrengthMin: () => (/* binding */ setWindInAdditionalStrengthMin),\n/* harmony export */ setWindInDelayMax: () => (/* binding */ setWindInDelayMax),\n/* harmony export */ setWindInDelayMin: () => (/* binding */ setWindInDelayMin),\n/* harmony export */ setWindInDurationMax: () => (/* binding */ setWindInDurationMax),\n/* harmony export */ setWindInDurationMin: () => (/* binding */ setWindInDurationMin),\n/* harmony export */ setWindOutChangeChance: () => (/* binding */ setWindOutChangeChance),\n/* harmony export */ setWindOutDelayMax: () => (/* binding */ setWindOutDelayMax),\n/* harmony export */ setWindOutDelayMin: () => (/* binding */ setWindOutDelayMin),\n/* harmony export */ setWindOutDurationMax: () => (/* binding */ setWindOutDurationMax),\n/* harmony export */ setWindOutDurationMin: () => (/* binding */ setWindOutDurationMin),\n/* harmony export */ setWindStrength: () => (/* binding */ setWindStrength),\n/* harmony export */ start: () => (/* binding */ start),\n/* harmony export */ stop: () => (/* binding */ stop),\n/* harmony export */ togglePaused: () => (/* binding */ togglePaused)\n/* harmony export */ });\n/* harmony import */ var _simulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./simulation */ \"./src/simulation.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config */ \"./src/config.ts\");\n/* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./defaults */ \"./src/defaults.ts\");\n/**\n * @module snowfall\n *\n * Lightweight, high-performance snowfall effect for the web.\n * Fully configurable, supports multiple layers, wind, gusts, and scheduled activation.\n *\n * Stay cool ☃️\n */\n\n\nvar simulation;\nfunction ensureRunning() {\n if (!simulation) {\n throw new Error('Snowfall simulation not started. Call snowfall.start() first.');\n }\n}\n/**\n * Starts the Snowfall simulation.\n *\n * @param {UserConfig} [config] - A config, possibly from the [Visual Config Editor](https://erikwatson.github.io/snowfall-editor/).\n */\nfunction start(config) {\n if (config === void 0) { config = {}; }\n try {\n if (!simulation) {\n simulation = _simulation__WEBPACK_IMPORTED_MODULE_0__.create();\n simulation.start(config);\n }\n else {\n simulation.restart();\n }\n }\n catch (error) {\n console.error(error);\n }\n}\nfunction restart(config) {\n if (config === void 0) { config = {}; }\n stop();\n start(config);\n}\nfunction stop() {\n simulation === null || simulation === void 0 ? void 0 : simulation.stop();\n simulation = undefined;\n}\n/**\n * Starts the Snowfall simulation when today's date falls within the date range in the schedule.\n *\n * @param {UserSchedule} userSchedule - A schedule config, defining when the simulation should run from, and when the simulation should run to.\n * @param {UserConfig} [config] - A config, possibly from the [Visual Config Editor](https://erikwatson.github.io/snowfall-editor/).\n */\nfunction schedule(userSchedule, config) {\n if (config === void 0) { config = {}; }\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.withinSchedule)(userSchedule)) {\n stop();\n start(config);\n }\n}\n/**\n * Set the colour of the Snowflakes\n * @param {string} colour - The colour to set\n * @param {number} layer - The layer to set the colour for\n */\nfunction setColour(colour, layer) {\n ensureRunning();\n simulation.setColour(colour, layer);\n}\n/**\n * Set the density of the Snowflakes. This is the number of snowflakes on screen\n * at a resolution of 1280 x 1080, but this number is scaled up and down at\n * higher and lower resolutions respectively to give a consistent look when\n * resizing.\n *\n * Setting this restarts the simulation.\n *\n * @param {number} density - A number representing the density of snowflakes.\n * @param {number} layer - The layer to set the density for\n */\nfunction setDensity(density, layer) {\n ensureRunning();\n simulation.setDensity(density, layer);\n}\n/**\n * Set the Amplitude of the sway of the Snowflakes\n *\n * @param {number} amplitude - The Amplitude to set\n * @param {number} layer - The layer to set the amplitude for\n */\nfunction setAmplitude(amplitude, layer) {\n ensureRunning();\n simulation.setAmplitude(amplitude, layer);\n}\n/**\n * Set the Frequency of the sway of the Snowflakes.\n *\n * @param {number} frequency - The frequency to set\n * @param {number} layer - The layer to set the frequency for\n */\nfunction setFrequency(frequency, layer) {\n ensureRunning();\n simulation.setFrequency(frequency, layer);\n}\n/**\n * Pauses or resumes a specific layer.\n *\n * @param {boolean} pause - Pass true to pause the layer, false to resume\n * @param {number} layer - The layer index\n */\nfunction setPaused(pause, layer) {\n ensureRunning();\n simulation.setPaused(pause, layer);\n}\n/**\n * Pause/unpause the snowfall update loop for a specific layer.\n *\n * @param layer - The layer index to toggle\n */\nfunction togglePaused(layer) {\n ensureRunning();\n simulation.togglePaused(layer);\n}\n/**\n * Set the angle and strength of the wind in the simulation.\n *\n * @param {number} angle - The angle of the wind, in degrees\n * @param {number} strength - The strength of the wind\n * @param {number} layer - The layer to set the wind for\n */\nfunction setWind(angle, strength, layer) {\n ensureRunning();\n simulation.setWind(angle, strength, layer);\n}\n/**\n * Set the angle of the wind in the simulation.\n *\n * @param {number} angle - The angle of the wind, in degrees\n * @param {number} layer - The layer to set the wind angle for\n */\nfunction setWindAngle(angle, layer) {\n ensureRunning();\n simulation.setWindAngle(angle, layer);\n}\n/**\n * Set the strength of the wind in the simulation.\n *\n * @param {number} strength - The strength of the wind\n * @param {number} layer - The layer to apply the wind strength to\n */\nfunction setWindStrength(strength, layer) {\n ensureRunning();\n simulation.setWindStrength(strength, layer);\n}\n/**\n * Set the wind gusts in the simulation.\n * This restarts the simulation.\n *\n * @param {boolean} gusts - Should there be gusts in the wind?\n * @param {number} layer - The layer to set the gusts for\n */\nfunction setGusts(gusts, layer) {\n ensureRunning();\n simulation.setGusts(gusts, layer);\n}\n/**\n * Set the angle and strength of gravity in the simulation.\n *\n * @param {number} angle - The angle of gravity, in degrees\n * @param {number} strength - The strength of the gravity\n * @param {number} layer - The layer to set the gravity for\n */\nfunction setGravity(angle, strength, layer) {\n ensureRunning();\n simulation.setGravity(angle, strength, layer);\n}\n/**\n * Set the angle of gravity in the simulation.\n *\n * @param {number} angle - The angle of gravity, in degrees\n * @param {number} layer - The layer to set the gravity angle for\n */\nfunction setGravityAngle(angle, layer) {\n ensureRunning();\n simulation.setGravityAngle(angle, layer);\n}\n/**\n * Set the strength of gravity in the simulation.\n *\n * @param {number} strength - The strength of the gravity\n * @param {number} layer - The layer to set the gravity strength for\n */\nfunction setGravityStrength(strength, layer) {\n ensureRunning();\n simulation.setGravityStrength(strength, layer);\n}\n/**\n * Set the minimum additional strength of the wind when it's coming in.\n *\n * @param {number} min - The minimum additional strength of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in additional strength min for\n * @returns {void}\n */\nfunction setWindInAdditionalStrengthMin(min, layer) {\n ensureRunning();\n simulation.setWindInAdditionalStrengthMin(min, layer);\n}\n/**\n * Set the maximum additional strength of the wind when it's coming in.\n *\n * @param {number} max - The maximum additional strength of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in additional strength max for\n * @returns {void}\n */\nfunction setWindInAdditionalStrengthMax(max, layer) {\n ensureRunning();\n simulation.setWindInAdditionalStrengthMax(max, layer);\n}\n/**\n * Set the minimum duration of the wind when it's coming in.\n *\n * @param {number} min - The minimum duration of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in duration min for\n * @returns {void}\n */\nfunction setWindInDurationMin(min, layer) {\n ensureRunning();\n simulation.setWindInDurationMin(min, layer);\n}\n/**\n * Set the maximum duration of the wind when it's coming in.\n *\n * @param {number} max - The maximum duration of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in duration max for\n * @returns {void}\n */\nfunction setWindInDurationMax(max, layer) {\n ensureRunning();\n simulation.setWindInDurationMax(max, layer);\n}\n/**\n * Set the minimum delay of the wind when it's coming in.\n *\n * @param {number} min - The minimum delay of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in delay min for\n * @returns {void}\n */\nfunction setWindInDelayMin(min, layer) {\n ensureRunning();\n simulation.setWindInDelayMin(min, layer);\n}\n/**\n * Set the maximum delay of the wind when it's coming in.\n *\n * @param {number} max - The maximum delay of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in delay max for\n * @returns {void}\n */\nfunction setWindInDelayMax(max, layer) {\n ensureRunning();\n simulation.setWindInDelayMax(max, layer);\n}\n/**\n * Set the minimum duration of the wind when it's going out.\n *\n * @param {number} min - The minimum duration of the wind when it's going out.\n * @param {number} layer - The layer to set the wind out duration min for\n * @returns {void}\n */\nfunction setWindOutDurationMin(min, layer) {\n ensureRunning();\n simulation.setWindOutDurationMin(min, layer);\n}\n/**\n * Set the maximum duration of the wind when it's going out.\n *\n * @param {number} max - The maximum duration of the wind when it's going out.\n * @param {number} layer - The layer to set the wind out duration max for\n * @returns {void}\n */\nfunction setWindOutDurationMax(max, layer) {\n ensureRunning();\n simulation.setWindOutDurationMax(max, layer);\n}\n/**\n * Set the minimum delay of the wind when it's going out.\n *\n * @param {number} min - The minimum delay of the wind when it's going out.\n * @param {number} layer - The layer to set the wind out delay min for\n * @returns {void}\n */\nfunction setWindOutDelayMin(min, layer) {\n ensureRunning();\n simulation.setWindOutDelayMin(min, layer);\n}\n/**\n * Set the maximum delay of the wind when it's going out.\n *\n * @param {number} max - The maximum delay of the wind when it's going out.\n * @param {number} layer - The layer to set the wind out delay max for\n * @returns {void}\n */\nfunction setWindOutDelayMax(max, layer) {\n ensureRunning();\n simulation.setWindOutDelayMax(max, layer);\n}\n/**\n * Set the chance of the wind changing direction after a gust.\n *\n * @param {number} chance - The chance of the wind changing direction after a gust.\n * @param {number} layer - The layer to set the wind out change chance for\n * @returns {void}\n */\nfunction setWindOutChangeChance(chance, layer) {\n ensureRunning();\n simulation.setWindOutChangeChance(chance, layer);\n}\n/**\n * Set the minimum mass of the snowflakes.\n *\n * @param {number} min - The minimum mass of the snowflakes.\n * @param {number} layer - The layer to set the mass min for\n */\nfunction setMassMin(min, layer) {\n ensureRunning();\n simulation.setMassMin(min, layer);\n}\n/**\n * Set the maximum mass of the snowflakes.\n *\n * @param {number} max - The maximum mass of the snowflakes.\n * @param {number} layer - The layer to set the mass max for\n */\nfunction setMassMax(max, layer) {\n ensureRunning();\n simulation.setMassMax(max, layer);\n}\n/**\n * Set the minimum size of the snowflakes.\n *\n * @param {number} min - The minimum rendered size of the snowflakes.\n * @param {number} layer - The layer to set the rendered size min for\n */\nfunction setSizeMin(min, layer) {\n ensureRunning();\n simulation.setSizeMin(min, layer);\n}\n/**\n * Set the maximum size of the snowflakes.\n *\n * @param {number} max - The maximum rendered size of the snowflakes.\n * @param {number} layer - The layer to set the rendered size max for\n */\nfunction setSizeMax(max, layer) {\n ensureRunning();\n simulation.setSizeMax(max, layer);\n}\n\n\n\n\n\n\n//# sourceURL=webpack://snowfall/./src/snowfall.ts?");
208
208
 
209
209
  /***/ }),
210
210
 
@@ -215,7 +215,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
215
215
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
216
216
 
217
217
  "use strict";
218
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addGravity: () => (/* binding */ addGravity),\n/* harmony export */ addRotation: () => (/* binding */ addRotation),\n/* harmony export */ addSwayMotion: () => (/* binding */ addSwayMotion),\n/* harmony export */ addWind: () => (/* binding */ addWind),\n/* harmony export */ fadeIn: () => (/* binding */ fadeIn),\n/* harmony export */ screenWrap: () => (/* binding */ screenWrap)\n/* harmony export */ });\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @erikwatson/bramble */ \"./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js\");\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ \"./src/math.ts\");\n\n\nfunction addWind(snowflake, angle, strength) {\n var w = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(0, 0);\n var windVec = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(angle);\n windVec.multiplyScalar(strength);\n w.x = windVec.x;\n w.y = windVec.y;\n w.multiplyScalar(snowflake.mass + snowflake.random);\n snowflake.position.add(w);\n}\nfunction addRotation(snowflake) {\n snowflake.rotation++;\n}\nfunction addGravity(snowflake, angle, strength) {\n var g = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(0, 0);\n var gravityVec = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(angle);\n gravityVec.multiplyScalar(strength);\n g.x = gravityVec.x;\n g.y = gravityVec.y;\n g.multiplyScalar(snowflake.mass + snowflake.random);\n snowflake.position.add(g);\n}\nfunction addSwayMotion(snowflake, gravity, sway) {\n // Calculate the sway motion perpendicular to the gravity vector\n var phase = snowflake.time + snowflake.noise;\n var xPos = sway.amplitude * Math.sin(sway.frequency * snowflake.time + phase);\n // Assuming gravity direction starts along the x-axis\n var g = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(1, 0);\n (0,_math__WEBPACK_IMPORTED_MODULE_1__.rotate)(g, gravity.angle);\n // Rotate the sine sway vector by the perpendicular vector's angle\n var sine = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(xPos, 0);\n (0,_math__WEBPACK_IMPORTED_MODULE_1__.rotate)(sine, gravity.angle + 90);\n snowflake.position.add(sine);\n}\nfunction fadeIn(snowflake) {\n if (snowflake.renderedSize < snowflake.mass) {\n snowflake.renderedSize = (0,_math__WEBPACK_IMPORTED_MODULE_1__.lerp)(snowflake.renderedSize, snowflake.mass, 0.025);\n }\n}\n// Is the snowflake visible on screen right now?\nfunction isVisible(snowflake, screenWidth, screenHeight) {\n var size = snowflake.size; // ideally the diagonal length of a square of our size\n var inBoundsHorizontal = snowflake.position.x + size >= 0 &&\n snowflake.position.x - size <= screenWidth;\n var inBoundsVertical = snowflake.position.y + size >= 0 &&\n snowflake.position.y - size <= screenHeight;\n return inBoundsHorizontal && inBoundsVertical;\n}\nfunction grow(snowflake, gravity, prevPos) {\n var currentPos = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.clone(snowflake.position);\n var delta = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.clone(currentPos);\n delta.subtract(prevPos);\n var gravityDir = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(gravity.angle);\n var upDir = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(-gravityDir.x, -gravityDir.y);\n var dotProduct = delta.dot(upDir);\n if (dotProduct > 0) {\n snowflake.renderedSize = (0,_math__WEBPACK_IMPORTED_MODULE_1__.lerp)(snowflake.renderedSize, snowflake.size, 0.25);\n }\n}\nfunction moveToTop(snowflake, screenWidth) {\n snowflake.position.y = -snowflake.size;\n snowflake.position.x = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(screenWidth); // deterministic x\n}\nfunction moveToBottom(snowflake, screenWidth, screenHeight) {\n snowflake.position.y = screenHeight + snowflake.size;\n snowflake.position.x = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(screenWidth); // deterministic x\n}\nfunction moveToLeft(snowflake, screenHeight) {\n snowflake.position.y = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(screenHeight); // deterministic y\n snowflake.position.x = -snowflake.size;\n}\nfunction moveToRight(snowflake, screenWidth, screenHeight) {\n snowflake.position.y = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(screenHeight); // deterministic y\n snowflake.position.x = screenWidth + snowflake.size;\n}\nfunction moveRandom(snowflake, screenWidth, screenHeight, gravity, prevPos) {\n // Determine the side moved from (exit side)\n var from_side;\n if (snowflake.position.y > screenHeight)\n from_side = 'bottom';\n else if (snowflake.position.y < 0)\n from_side = 'top';\n else if (snowflake.position.x < 0)\n from_side = 'left';\n else if (snowflake.position.x > screenWidth)\n from_side = 'right';\n else\n from_side = 'bottom';\n // Compute velocity\n var vel = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(snowflake.position.x - prevPos.x, snowflake.position.y - prevPos.y);\n // Determine moving directions\n var moving_in = [];\n if (vel.x > 0)\n moving_in.push('right');\n if (vel.x < 0)\n moving_in.push('left');\n if (vel.y > 0)\n moving_in.push('bottom');\n if (vel.y < 0)\n moving_in.push('top');\n // Possible sides to move to\n var sides = ['top', 'bottom', 'left', 'right'].filter(function (s) { return s !== from_side && !moving_in.includes(s); });\n // Choose side using seededRandom\n var chosen = sides[Math.floor((0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(0, sides.length))];\n var opposites = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left'\n };\n var up_side = opposites[from_side];\n // Move to chosen side\n if (chosen === 'top')\n moveToTop(snowflake, screenWidth);\n else if (chosen === 'bottom')\n moveToBottom(snowflake, screenWidth, screenHeight);\n else if (chosen === 'left')\n moveToLeft(snowflake, screenHeight);\n else if (chosen === 'right')\n moveToRight(snowflake, screenWidth, screenHeight);\n // Grow if moving to the \"up\" side\n if (chosen === up_side)\n grow(snowflake, gravity, prevPos);\n}\nfunction screenWrap(snowflake, width, height, gravity) {\n var prevPos = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.clone(snowflake.position);\n if (!isVisible(snowflake, width, height)) {\n moveRandom(snowflake, width, height, gravity, prevPos);\n }\n}\n\n\n//# sourceURL=webpack://snowfall/./src/snowflake/move.ts?");
218
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addGravity: () => (/* binding */ addGravity),\n/* harmony export */ addRotation: () => (/* binding */ addRotation),\n/* harmony export */ addSwayMotion: () => (/* binding */ addSwayMotion),\n/* harmony export */ addWind: () => (/* binding */ addWind),\n/* harmony export */ fadeIn: () => (/* binding */ fadeIn),\n/* harmony export */ screenWrap: () => (/* binding */ screenWrap)\n/* harmony export */ });\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @erikwatson/bramble */ \"./node_modules/.pnpm/@erikwatson+bramble@0.10.0/node_modules/@erikwatson/bramble/dist/bramble.js\");\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ \"./src/math.ts\");\n\n\nfunction addWind(snowflake, angle, strength) {\n var w = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(0, 0);\n var windVec = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(angle);\n windVec.multiplyScalar(strength);\n w.x = windVec.x;\n w.y = windVec.y;\n w.multiplyScalar(snowflake.mass + snowflake.random);\n snowflake.position.add(w);\n}\nfunction addRotation(snowflake) {\n snowflake.rotation++;\n}\nfunction addGravity(snowflake, angle, strength) {\n var g = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(0, 0);\n var gravityVec = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(angle);\n gravityVec.multiplyScalar(strength);\n g.x = gravityVec.x;\n g.y = gravityVec.y;\n g.multiplyScalar(snowflake.mass + snowflake.random);\n snowflake.position.add(g);\n}\nfunction addSwayMotion(snowflake, gravity, sway) {\n // Calculate the sway motion perpendicular to the gravity vector\n var phase = snowflake.time + snowflake.noise;\n var xPos = sway.amplitude * Math.sin(sway.frequency * snowflake.time + phase);\n // Assuming gravity direction starts along the x-axis\n var g = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(1, 0);\n (0,_math__WEBPACK_IMPORTED_MODULE_1__.rotate)(g, gravity.angle);\n // Rotate the sine sway vector by the perpendicular vector's angle\n var sine = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(xPos, 0);\n (0,_math__WEBPACK_IMPORTED_MODULE_1__.rotate)(sine, gravity.angle + 90);\n snowflake.position.add(sine);\n}\nfunction fadeIn(snowflake) {\n if (snowflake.renderedSize < snowflake.mass) {\n snowflake.renderedSize = (0,_math__WEBPACK_IMPORTED_MODULE_1__.lerp)(snowflake.renderedSize, snowflake.mass, 0.025);\n }\n}\n// Is the snowflake visible on screen right now?\nfunction isVisible(snowflake, screenWidth, screenHeight) {\n var size = snowflake.size; // ideally the diagonal length of a square of our size\n var inBoundsHorizontal = snowflake.position.x + size >= 0 &&\n snowflake.position.x - size <= screenWidth;\n var inBoundsVertical = snowflake.position.y + size >= 0 &&\n snowflake.position.y - size <= screenHeight;\n return inBoundsHorizontal && inBoundsVertical;\n}\nfunction grow(snowflake, gravity, prevPos) {\n var currentPos = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.clone(snowflake.position);\n var delta = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.clone(currentPos);\n delta.subtract(prevPos);\n var gravityDir = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(gravity.angle);\n var upDir = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(-gravityDir.x, -gravityDir.y);\n var dotProduct = delta.dot(upDir);\n if (dotProduct > 0) {\n snowflake.renderedSize = (0,_math__WEBPACK_IMPORTED_MODULE_1__.lerp)(snowflake.renderedSize, snowflake.size, 0.25);\n }\n}\nfunction moveToTop(snowflake, screenWidth) {\n snowflake.position.y = -snowflake.size;\n snowflake.position.x = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(screenWidth); // deterministic x\n}\nfunction moveToBottom(snowflake, screenWidth, screenHeight) {\n snowflake.position.y = screenHeight + snowflake.size;\n snowflake.position.x = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(screenWidth); // deterministic x\n}\nfunction moveToLeft(snowflake, screenHeight) {\n snowflake.position.y = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(screenHeight); // deterministic y\n snowflake.position.x = -snowflake.size;\n}\nfunction moveToRight(snowflake, screenWidth, screenHeight) {\n snowflake.position.y = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(screenHeight); // deterministic y\n snowflake.position.x = screenWidth + snowflake.size;\n}\nfunction moveRandom(snowflake, screenWidth, screenHeight, gravity, prevPos) {\n // Determine the side moved from (exit side)\n var from_side;\n if (snowflake.position.y > screenHeight)\n from_side = 'bottom';\n else if (snowflake.position.y < 0)\n from_side = 'top';\n else if (snowflake.position.x < 0)\n from_side = 'left';\n else if (snowflake.position.x > screenWidth)\n from_side = 'right';\n else\n from_side = 'bottom';\n // Compute velocity\n var vel = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(snowflake.position.x - prevPos.x, snowflake.position.y - prevPos.y);\n // Determine moving directions\n var moving_in = [];\n if (vel.x > 0)\n moving_in.push('right');\n if (vel.x < 0)\n moving_in.push('left');\n if (vel.y > 0)\n moving_in.push('bottom');\n if (vel.y < 0)\n moving_in.push('top');\n // Possible sides to move to\n var sides = ['top', 'bottom', 'left', 'right'].filter(function (s) { return s !== from_side && !moving_in.includes(s); });\n // Choose side using seededRandom\n var chosen = sides[Math.floor((0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(0, sides.length))];\n var opposites = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left'\n };\n var up_side = opposites[from_side];\n // Move to chosen side\n if (chosen === 'top')\n moveToTop(snowflake, screenWidth);\n else if (chosen === 'bottom')\n moveToBottom(snowflake, screenWidth, screenHeight);\n else if (chosen === 'left')\n moveToLeft(snowflake, screenHeight);\n else if (chosen === 'right')\n moveToRight(snowflake, screenWidth, screenHeight);\n // Grow if moving to the \"up\" side\n if (chosen === up_side)\n grow(snowflake, gravity, prevPos);\n}\nfunction screenWrap(snowflake, width, height, gravity) {\n var prevPos = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.clone(snowflake.position);\n if (!isVisible(snowflake, width, height)) {\n moveRandom(snowflake, width, height, gravity, prevPos);\n }\n}\n\n\n//# sourceURL=webpack://snowfall/./src/snowflake/move.ts?");
219
219
 
220
220
  /***/ }),
221
221
 
@@ -237,7 +237,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n\n\n\n//# sourceURL=webpack:/
237
237
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
238
238
 
239
239
  "use strict";
240
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clone: () => (/* binding */ clone),\n/* harmony export */ getElementOrThrow: () => (/* binding */ getElementOrThrow),\n/* harmony export */ isSimpleLayer: () => (/* binding */ isSimpleLayer),\n/* harmony export */ makeSnowflakes: () => (/* binding */ makeSnowflakes),\n/* harmony export */ requiredSnowflakes: () => (/* binding */ requiredSnowflakes),\n/* harmony export */ withinSchedule: () => (/* binding */ withinSchedule)\n/* harmony export */ });\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @erikwatson/bramble */ \"./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js\");\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ \"./src/math.ts\");\n\n\nfunction getElementOrThrow(id) {\n var result = document.getElementById(id);\n if (!result) {\n throw new Error(\"Error: Element #\".concat(id, \" not found.\"));\n }\n return result;\n}\nfunction withinSchedule(schedule) {\n // Input validation\n var maxDaysPerMonth = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (schedule.from.month < 1 ||\n schedule.from.month > 12 ||\n schedule.from.day < 1 ||\n schedule.from.day > maxDaysPerMonth[schedule.from.month] ||\n schedule.to.month < 1 ||\n schedule.to.month > 12 ||\n schedule.to.day < 1 ||\n schedule.to.day > maxDaysPerMonth[schedule.to.month]) {\n throw new Error('Invalid date in schedule');\n }\n var today = new Date();\n var todayMonth = today.getUTCMonth() + 1;\n var todayDay = today.getUTCDate();\n var todayMD = todayMonth * 100 + todayDay;\n var fromMD = schedule.from.month * 100 + schedule.from.day;\n var toMD = schedule.to.month * 100 + schedule.to.day;\n var shouldStart;\n if (fromMD <= toMD) {\n shouldStart = todayMD >= fromMD && todayMD <= toMD;\n }\n else {\n shouldStart = todayMD >= fromMD || todayMD <= toMD;\n }\n return shouldStart;\n}\n// This function figures out how many snowflakes we should use for our given\n// canvas size.\n//\n// Just setting a fixed number of snowflakes would give an uneven distribution\n// of snowflakes across different screen sizes, for example.\nfunction requiredSnowflakes(width, height, density) {\n var tenEightyPee = 1920 * 1080;\n var thisScreen = width * height;\n var snowflakeCount = Math.round(density * (thisScreen / tenEightyPee));\n return snowflakeCount;\n}\nfunction clone(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nfunction makeSnowflakes(num, config, width, height) {\n var result = Array.from({ length: num }, function () {\n var posX = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(width);\n var posY = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(height);\n var position = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(posX, posY);\n var size = config.size.min + (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)() * (config.size.max - config.mass.min);\n return {\n position: position,\n // size: 3 + random() * 5,\n // size: 1 + random() * 2,\n mass: config.mass.min + (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)() * (config.mass.max - config.mass.min),\n size: size,\n renderedSize: size,\n noise: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(10), // Random value, just to add some uncertainty\n amplitude: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(config.sway.amplitude),\n frequency: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(config.sway.frequency),\n random: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(),\n rotation: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(360),\n time: 0,\n opacity: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(config.opacity.min, config.opacity.max)\n };\n });\n return result;\n}\nfunction isSimpleLayer(layer) {\n return layer.mode === 'simple' || layer.mode === undefined;\n}\n\n\n//# sourceURL=webpack://snowfall/./src/utils.ts?");
240
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clone: () => (/* binding */ clone),\n/* harmony export */ getElementOrThrow: () => (/* binding */ getElementOrThrow),\n/* harmony export */ isSimpleLayer: () => (/* binding */ isSimpleLayer),\n/* harmony export */ makeSnowflakes: () => (/* binding */ makeSnowflakes),\n/* harmony export */ requiredSnowflakes: () => (/* binding */ requiredSnowflakes),\n/* harmony export */ withinSchedule: () => (/* binding */ withinSchedule)\n/* harmony export */ });\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @erikwatson/bramble */ \"./node_modules/.pnpm/@erikwatson+bramble@0.10.0/node_modules/@erikwatson/bramble/dist/bramble.js\");\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ \"./src/math.ts\");\n\n\nfunction getElementOrThrow(id) {\n var result = document.getElementById(id);\n if (!result) {\n throw new Error(\"Error: Element #\".concat(id, \" not found.\"));\n }\n return result;\n}\nfunction withinSchedule(schedule) {\n // Input validation\n var maxDaysPerMonth = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (schedule.from.month < 1 ||\n schedule.from.month > 12 ||\n schedule.from.day < 1 ||\n schedule.from.day > maxDaysPerMonth[schedule.from.month] ||\n schedule.to.month < 1 ||\n schedule.to.month > 12 ||\n schedule.to.day < 1 ||\n schedule.to.day > maxDaysPerMonth[schedule.to.month]) {\n throw new Error('Invalid date in schedule');\n }\n var today = new Date();\n var todayMonth = today.getUTCMonth() + 1;\n var todayDay = today.getUTCDate();\n var todayMD = todayMonth * 100 + todayDay;\n var fromMD = schedule.from.month * 100 + schedule.from.day;\n var toMD = schedule.to.month * 100 + schedule.to.day;\n var shouldStart;\n if (fromMD <= toMD) {\n shouldStart = todayMD >= fromMD && todayMD <= toMD;\n }\n else {\n shouldStart = todayMD >= fromMD || todayMD <= toMD;\n }\n return shouldStart;\n}\n// This function figures out how many snowflakes we should use for our given\n// canvas size.\n//\n// Just setting a fixed number of snowflakes would give an uneven distribution\n// of snowflakes across different screen sizes, for example.\nfunction requiredSnowflakes(width, height, density) {\n var tenEightyPee = 1920 * 1080;\n var thisScreen = width * height;\n var snowflakeCount = Math.round(density * (thisScreen / tenEightyPee));\n return snowflakeCount;\n}\nfunction clone(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nfunction makeSnowflakes(num, config, width, height) {\n var result = Array.from({ length: num }, function () {\n var posX = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(width);\n var posY = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(height);\n var position = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(posX, posY);\n var size = config.size.min + (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)() * (config.size.max - config.mass.min);\n return {\n position: position,\n // size: 3 + random() * 5,\n // size: 1 + random() * 2,\n mass: config.mass.min + (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)() * (config.mass.max - config.mass.min),\n size: size,\n renderedSize: size,\n noise: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(10), // Random value, just to add some uncertainty\n amplitude: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(config.sway.amplitude),\n frequency: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(config.sway.frequency),\n random: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(),\n rotation: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(360),\n time: 0,\n opacity: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(config.opacity.min, config.opacity.max)\n };\n });\n return result;\n}\nfunction isSimpleLayer(layer) {\n return layer.mode === 'simple' || layer.mode === undefined;\n}\n\n\n//# sourceURL=webpack://snowfall/./src/utils.ts?");
241
241
 
242
242
  /***/ }),
243
243