diff --git a/docs/css/app.6d5a79b4.css b/docs/css/app.6d5a79b4.css new file mode 100644 index 0000000..f5f28cb --- /dev/null +++ b/docs/css/app.6d5a79b4.css @@ -0,0 +1 @@ +*{overflow:hidden;margin:0;padding:0;background-color:#171717}#app,#pixi{width:100%;height:100%}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50} \ No newline at end of file diff --git a/docs/css/app.a9672bd0.css b/docs/css/app.a9672bd0.css deleted file mode 100644 index 10885ff..0000000 --- a/docs/css/app.a9672bd0.css +++ /dev/null @@ -1 +0,0 @@ -body{margin:0;padding:0;background-color:#171717}#app,#pixi{width:100%;height:100%}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 8bf14d2..cd8bdf7 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1 +1 @@ -lovely
\ No newline at end of file +lovely
\ No newline at end of file diff --git a/docs/js/app.2bfe5028.js.map b/docs/js/app.2bfe5028.js.map deleted file mode 100644 index 838adf9..0000000 --- a/docs/js/app.2bfe5028.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/app.2bfe5028.js","mappings":"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","sources":["webpack://lovely/./src/App.vue","webpack://lovely/./src/easing.js","webpack://lovely/./src/util.js","webpack://lovely/./src/random.js","webpack://lovely/./src/manage.js","webpack://lovely/./src/App.vue?7ccd","webpack://lovely/./src/main.js","webpack://lovely/./src/assets/emojis/ sync ^\\.\\/.*\\.png$","webpack://lovely/webpack/bootstrap","webpack://lovely/webpack/runtime/chunk loaded","webpack://lovely/webpack/runtime/compat get default export","webpack://lovely/webpack/runtime/define property getters","webpack://lovely/webpack/runtime/global","webpack://lovely/webpack/runtime/hasOwnProperty shorthand","webpack://lovely/webpack/runtime/node module decorator","webpack://lovely/webpack/runtime/publicPath","webpack://lovely/webpack/runtime/jsonp chunk loading","webpack://lovely/webpack/startup"],"sourcesContent":["\n\n\n\n\n","const Easing = {\r\n linear: function () {\r\n return function (t) {\r\n return t;\r\n };\r\n },\r\n\r\n inQuad: function () {\r\n return function (t) {\r\n return t * t;\r\n };\r\n },\r\n\r\n outQuad: function () {\r\n return function (t) {\r\n return t * (2 - t);\r\n };\r\n },\r\n\r\n inOutQuad: function () {\r\n return function (t) {\r\n t *= 2;\r\n if (t < 1) return 0.5 * t * t;\r\n return -0.5 * (--t * (t - 2) - 1);\r\n };\r\n },\r\n\r\n inCubic: function () {\r\n return function (t) {\r\n return t * t * t;\r\n };\r\n },\r\n\r\n outCubic: function () {\r\n return function (t) {\r\n return --t * t * t + 1;\r\n };\r\n },\r\n\r\n inOutCubic: function () {\r\n return function (t) {\r\n t *= 2;\r\n if (t < 1) return 0.5 * t * t * t;\r\n t -= 2\r\n return 0.5 * (t * t * t + 2);\r\n };\r\n },\r\n\r\n inQuart: function () {\r\n return function (t) {\r\n return t * t * t * t;\r\n };\r\n },\r\n\r\n outQuart: function () {\r\n return function (t) {\r\n return 1 - (--t * t * t * t);\r\n };\r\n },\r\n\r\n inOutQuart: function () {\r\n return function (t) {\r\n t *= 2;\r\n if (t < 1) return 0.5 * t * t * t * t;\r\n t -= 2;\r\n return -0.5 * (t * t * t * t - 2);\r\n };\r\n },\r\n\r\n inQuint: function () {\r\n return function (t) {\r\n return t * t * t * t * t;\r\n };\r\n },\r\n\r\n outQuint: function () {\r\n return function (t) {\r\n return --t * t * t * t * t + 1;\r\n };\r\n },\r\n\r\n inOutQuint: function () {\r\n return function (t) {\r\n t *= 2;\r\n if (t < 1) return 0.5 * t * t * t * t * t;\r\n t -= 2;\r\n return 0.5 * (t * t * t * t * t + 2);\r\n };\r\n },\r\n\r\n inSine: function () {\r\n return function (t) {\r\n return 1 - Math.cos(t * Math.PI / 2);\r\n };\r\n },\r\n\r\n outSine: function () {\r\n return function (t) {\r\n return Math.sin(t * Math.PI / 2);\r\n };\r\n },\r\n\r\n inOutSine: function () {\r\n return function (t) {\r\n return 0.5 * (1 - Math.cos(Math.PI * t));\r\n };\r\n },\r\n\r\n inExpo: function () {\r\n return function (t) {\r\n return t === 0 ? 0 : Math.pow(1024, t - 1);\r\n };\r\n },\r\n\r\n outExpo: function () {\r\n return function (t) {\r\n return t === 1 ? 1 : 1 - Math.pow(2, -10 * t);\r\n };\r\n },\r\n\r\n inOutExpo: function () {\r\n return function (t) {\r\n if (t === 0) return 0;\r\n if (t === 1) return 1;\r\n t *= 2;\r\n if (t < 1) return 0.5 * Math.pow(1024, t - 1);\r\n return 0.5 * (-Math.pow(2, -10 * (t - 1)) + 2);\r\n };\r\n },\r\n\r\n inCirc: function () {\r\n return function (t) {\r\n return 1 - Math.sqrt(1 - t * t);\r\n };\r\n },\r\n\r\n outCirc: function () {\r\n return function (t) {\r\n return Math.sqrt(1 - (--t * t));\r\n };\r\n },\r\n\r\n inOutCirc: function () {\r\n return function (t) {\r\n t *= 2\r\n if (t < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1);\r\n return 0.5 * (Math.sqrt(1 - (t - 2) * (t - 2)) + 1);\r\n };\r\n },\r\n\r\n\r\n inElastic: function (a = 0.1, p = 0.4) {\r\n return function (t) {\r\n let s;\r\n if (t === 0) return 0;\r\n if (t === 1) return 1;\r\n if (!a || a < 1) {\r\n a = 1;\r\n s = p / 4;\r\n } else s = p * Math.asin(1 / a) / (2 * Math.PI);\r\n return -(a * Math.pow(2, 10 * (t - 1)) * Math.sin(((t - 1) - s) * (2 * Math.PI) / p));\r\n };\r\n },\r\n\r\n outElastic: function (a = 0.1, p = 0.4) {\r\n return function (t) {\r\n let s;\r\n if (t === 0) return 0;\r\n if (t === 1) return 1;\r\n if (!a || a < 1) {\r\n a = 1;\r\n s = p / 4;\r\n } else s = p * Math.asin(1 / a) / (2 * Math.PI);\r\n return (a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1);\r\n };\r\n },\r\n\r\n inOutElastic: function (a = 0.1, p = 0.4) {\r\n return function (t) {\r\n let s;\r\n if (t === 0) return 0;\r\n if (t === 1) return 1;\r\n if (!a || a < 1) {\r\n a = 1;\r\n s = p / 4;\r\n } else s = p * Math.asin(1 / a) / (2 * Math.PI);\r\n t *= 2;\r\n if (t < 1) return -0.5 * (a * Math.pow(2, 10 * (t - 1)) * Math.sin(((t - 1) - s) * (2 * Math.PI) / p));\r\n return a * Math.pow(2, -10 * (t - 1)) * Math.sin(((t - 1) - s) * (2 * Math.PI) / p) * 0.5 + 1;\r\n };\r\n },\r\n\r\n inBack: function (v) {\r\n return function (t) {\r\n let s = v || 1.70158;\r\n return t * t * ((s + 1) * t - s);\r\n };\r\n },\r\n\r\n outBack: function (v) {\r\n return function (t) {\r\n let s = v || 1.70158;\r\n return --t * t * ((s + 1) * t + s) + 1;\r\n };\r\n },\r\n\r\n inOutBack: function (v) {\r\n return function (t) {\r\n let s = (v || 1.70158) * 1.525;\r\n t *= 2;\r\n if (t < 1) return 0.5 * (t * t * ((s + 1) * t - s));\r\n return 0.5 * ((t - 2) * (t - 2) * ((s + 1) * (t - 2) + s) + 2);\r\n };\r\n },\r\n\r\n inBounce: function () {\r\n return function (t) {\r\n return 1 - Easing.outBounce()(1 - t);\r\n };\r\n },\r\n\r\n outBounce: function () {\r\n return function (t) {\r\n if (t < (1 / 2.75)) {\r\n return 7.5625 * t * t;\r\n } else if (t < (2 / 2.75)) {\r\n t = (t - (1.5 / 2.75));\r\n return 7.5625 * t * t + 0.75;\r\n } else if (t < (2.5 / 2.75)) {\r\n t = (t - (2.25 / 2.75));\r\n return 7.5625 * t * t + 0.9375;\r\n } else {\r\n t -= (2.625 / 2.75);\r\n return 7.5625 * t * t + 0.984375;\r\n }\r\n };\r\n },\r\n\r\n inOutBounce: function () {\r\n return function (t) {\r\n if (t < 0.5) return Easing.inBounce()(t * 2) * 0.5;\r\n return Easing.outBounce()(t * 2 - 1) * 0.5 + 0.5;\r\n };\r\n },\r\n\r\n customArray: function (arr) {\r\n if (!arr) return Easing.linear();\r\n return function (t) {\r\n //todo: convert array => ease\r\n return t;\r\n }\r\n }\r\n};\r\n\r\nexport default Easing;\r\n","import {Point} from \"pixi.js\";\r\n\r\nexport default {\r\n getDistanceSimple(aX, aY, bX, bY) {\r\n return Math.sqrt(Math.pow(aX - bX, 2) + Math.pow(aY - bY, 2))\r\n },\r\n getDistance(a, b) {\r\n return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2))\r\n },\r\n getAngle(originX, originY, targetX, targetY) {\r\n let dx = originX - targetX, dy = originY - targetY;\r\n\r\n let theta = Math.atan2(dy, -dx); // [0, Ⲡ] then [-Ⲡ, 0]; anticlockwise; 0° = east\r\n theta *= 180 / Math.PI; // [0, 180] then [-180, 0]; anticlockwise; 0° = east\r\n if (theta < 0) theta += 360; // [0, 360]; anticlockwise; 0° = east\r\n\r\n return theta;\r\n },\r\n /**\r\n * Converts an angle in degrees to radians\r\n * @param theta An angle in degrees.\r\n * @returns {number} An angle in radians.\r\n */\r\n toRadians(theta) {\r\n return theta / 180 * Math.PI;\r\n },\r\n /**\r\n * Converts an angle in radians to degrees.\r\n * @param theta An angle in radians.\r\n * @returns {number} An angle in degrees.\r\n */\r\n toDegrees(theta) {\r\n return theta / Math.PI * 180;\r\n },\r\n /**\r\n * Generates a number of sections and returns basic generation data to assist initialization of the canvas.\r\n * @param sectionCount The number of sections a 360 degree / 2pi area should be split up into.\r\n * @returns {*[]} Returns an array of objects containing useful pre-generated angles & data.\r\n */\r\n generateSections(sectionCount) {\r\n let data = [];\r\n let baseAngle = (2 * Math.PI) / sectionCount;\r\n for (let section = 0; section < sectionCount; section++) {\r\n let startAngle = baseAngle * section;\r\n let endAngle = startAngle + baseAngle;\r\n let centerAngle = startAngle + (baseAngle / 2.0);\r\n let velocityPoint = new Point(-Math.cos(centerAngle), Math.sin(centerAngle));\r\n data.push({startAngle, centerAngle, endAngle, velocityPoint});\r\n }\r\n return data;\r\n }\r\n}","import {Point} from \"pixi.js\";\r\n\r\nexport default {\r\n /**\r\n * Returns a random integer value from [min, max].\r\n * @param min The minimum integer value to be returned (inclusive).\r\n * @param max The maximum integer value to be returned (inclusive).\r\n * @returns {number} A random integer value.\r\n */\r\n randInt(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1) + min)\r\n },\r\n /**\r\n * Returns a floating point value from [min, max).\r\n * @param min The minimum value (inclusive) to be returned.\r\n * @param max The maximum value (non-inclusive) to be returned.\r\n * @returns {*} A random floating point value.\r\n */\r\n uniform(min, max) {\r\n return (Math.random() * (max - min)) + min;\r\n },\r\n /**\r\n * Returns a random item from inside the array.\r\n * @param array An array of any length.\r\n * @returns {null|*} Returns an item if there is at least 1 item inside the array. Otherwise, returns null.\r\n */\r\n choice: function (array) {\r\n if (array.length < 1) return null;\r\n else if (array.length === 1) return array[0];\r\n return array[this.randInt(0, array.length - 1)];\r\n },\r\n /**\r\n * Generates a point inside a rectangle defined by its center and a width & height.\r\n * May not be the most efficient method, but it's fine for now.\r\n * @param center The center of the rectangle.\r\n * @param height The height of the rectangle.\r\n * @param width The width of the rectangle.\r\n * @returns {Point} A point inside the rectangle defined by these arguments.\r\n */\r\n pointInRectangle(center, height, width) {\r\n let widthOffset = width / 2.0, heightOffset = height / 2.0;\r\n return new Point(\r\n this.uniform(center.x - widthOffset, center.y + widthOffset),\r\n this.uniform(center.y - heightOffset, center.y + heightOffset));\r\n },\r\n /**\r\n * Generates a random point inside a circle (or disc, if minRadius > 0).\r\n * @param center The position at which the circle is centered on.\r\n * @param minRadius The minimum radius the point could be from the center.\r\n * @param maxRadius The maximum radius the point could be from the center.\r\n * @returns {Point} A point inside the disc.\r\n */\r\n pointInCircle(center, minRadius, maxRadius) {\r\n const radius = this.uniform(minRadius, maxRadius);\r\n const angle = this.uniform(0, Math.PI * 2);\r\n return new Point(\r\n Math.cos(angle) * radius + center.x,\r\n Math.sin(angle) * radius + center.y\r\n );\r\n },\r\n /**\r\n *\r\n * @param min A point object representing the minimum X and Y values to be generated.\r\n * @param max A point object representing the maximum X and Y values to be generated.\r\n * @param minDistance The minimum distance each point must be from each other.\r\n * @param maxPoints The maximum number of points to be generated.\r\n * @param maxIterations The maximum number of generation attempts to be made before generating.\r\n * @returns {*[]} An array containing up to {maxPoints} points.\r\n */\r\n spacedPointsInRectangle(min, max, minDistance, maxPoints, maxIterations) {\r\n const minX = min.x;\r\n const minY = min.y;\r\n const maxX = max.x;\r\n const maxY = max.y;\r\n let pointCount = 0;\r\n let iterations = 0;\r\n let points = [];\r\n\r\n // Generate a point until both maximums are satisfied\r\n while (pointCount < maxPoints && iterations < maxIterations) {\r\n iterations++;\r\n let newPoint = new Point(this.uniform(minX, maxX), this.uniform(minY, maxY));\r\n if (!points.some((otherPoint) => this.getDistance(newPoint, otherPoint) < minDistance)) {\r\n pointCount++;\r\n points.push(newPoint);\r\n }\r\n }\r\n return points\r\n }\r\n};","import * as PIXI from 'pixi.js'\r\nimport {Point} from \"pixi.js\";\r\nimport easing from \"@/easing\";\r\nimport util from \"@/util\";\r\nimport {MotionBlurFilter} from \"@pixi/filter-motion-blur\";\r\nimport random from \"@/random\";\r\n\r\nclass Manager {\r\n REMOVAL_BUFFER = 100 // The buffer zone for sprite removal to prevent sprites from being deleted before they are entirely out of view.\r\n MAX_BASELINE_SCALE = 0.65; // Maximum scaling constant for sprites.\r\n MAX_SPRITE_COUNT = 200; // The maximum number of sprites that should be rendered at once.\r\n EASING_FUNCTION = easing.outExpo(); // The easing function that controls movement & scaling easing.\r\n MOTION_BLUR_KERNEL_SIZE = 3; // Controls motion blur quality.\r\n MOTION_BLUR_SCALE = 7; // The maximum scale motion blur can be in either X or Y.\r\n VELOCITY_SCALE = 3;\r\n TIME_PERIOD = 60;\r\n EDGE_BUFFER = 0.15;\r\n MIN_RADIUS = 30;\r\n TIME_SCALE = 2.8;\r\n\r\n constructor(app, sectionCount) {\r\n this.app = app;\r\n\r\n this.sectionCount = sectionCount;\r\n // A list of containers with separate sections of items relegated by their angle.\r\n this.sections = util.generateSections(sectionCount).map((sectionData) => {\r\n const container = new PIXI.Container();\r\n let blurX = sectionData.velocityPoint.x * this.MOTION_BLUR_SCALE,\r\n blurY = sectionData.velocityPoint.y * this.MOTION_BLUR_SCALE;\r\n container.filters = [new MotionBlurFilter([blurX, blurY], this.MOTION_BLUR_KERNEL_SIZE)]\r\n app.stage.addChild(container);\r\n return container;\r\n });\r\n\r\n this.sectionSprites = Array.from(Array(sectionCount), () => new Array(0))\r\n\r\n // Section Constants\r\n this.BASE_ANGLE_DEG = 360 / this.sectionCount;\r\n this.BASE_ANGLE_RAD = (Math.PI * 2) / this.sectionCount;\r\n\r\n // Geometric Constants\r\n this.WIDTH = app.screen.width;\r\n this.HEIGHT = app.screen.height;\r\n this.LEFT = -this.WIDTH / 2;\r\n this.RIGHT = this.WIDTH / 2;\r\n this.TOP = -this.HEIGHT / 2;\r\n this.BOTTOM = this.HEIGHT / 2;\r\n\r\n // Position Constants\r\n this.POSITIONS = {\r\n topLeft: new Point(-this.WIDTH / 2, this.HEIGHT / 2),\r\n topRight: new Point(this.WIDTH / 2, this.HEIGHT / 2),\r\n bottomLeft: new Point(-this.WIDTH / 2, -this.HEIGHT / 2),\r\n bottomRight: new Point(this.WIDTH / 2, -this.HEIGHT / 2),\r\n center: new Point(0, 0)\r\n }\r\n\r\n // A list of texture names for the emojis to be used.\r\n this.emojiList = [\"heart_with_arrow\",\r\n \"heart_with_ribbon\",\r\n \"heavy_heart_exclamation_mark_ornament\",\r\n \"revolving_hearts\",\r\n \"sparkles\",\r\n \"sparkling_heart\"];\r\n\r\n // Load all textures into memory\r\n this.textures = this.emojiList.map(\r\n (emoji_name) => PIXI.Texture.from(require(`./assets/emojis/${emoji_name}.png`))\r\n );\r\n\r\n // Buffer size constants\r\n this.BUFFER_LEFT = this.LEFT - this.REMOVAL_BUFFER;\r\n this.BUFFER_RIGHT = this.RIGHT + this.REMOVAL_BUFFER;\r\n this.BUFFER_TOP = this.TOP - this.REMOVAL_BUFFER;\r\n this.BUFFER_BOTTOM = this.BOTTOM + this.REMOVAL_BUFFER;\r\n\r\n this.MAX_DISTANCE = util.getDistance(this.POSITIONS.topLeft, this.POSITIONS.center);\r\n this.total_sprites = 0;\r\n\r\n // Generation Constants\r\n this.MAX_RADIUS = Math.min(this.app.screen.width, this.app.screen.height) * (1 - this.EDGE_BUFFER);\r\n\r\n // Sprites that have gone out of boundary and need to be used.\r\n this.sprite_trash = [];\r\n }\r\n\r\n /**\r\n * Generate a new point and automatically add it to the container.\r\n */\r\n generatePoint() {\r\n // Generation initial data on the point\r\n let point = random.pointInCircle(new Point(0, 0), this.MIN_RADIUS, this.MAX_RADIUS);\r\n let sprite;\r\n\r\n // Acquire sprite object.\r\n if (this.sprite_trash.length < 1) {\r\n sprite = new PIXI.Sprite(random.choice(this.textures));\r\n } else {\r\n sprite = this.sprite_trash.shift();\r\n sprite.visible = true;\r\n }\r\n\r\n // Place the sprite at the point\r\n sprite.anchor.set(0.5, 0.5);\r\n sprite.x = point.x;\r\n sprite.y = point.y;\r\n\r\n // Set scale\r\n sprite.baselineScale = random.uniform(0.05, 0.12)\r\n sprite.scale.set(0, 0)\r\n\r\n // Get the correct section & velocity for the sprite\r\n const angleFromCenter = util.getAngle(0, 0, point.x, point.y) * Math.PI / 180;\r\n const sectionIndex = Math.floor(angleFromCenter / this.BASE_ANGLE_RAD);\r\n const velocity = this.VELOCITY_SCALE * random.uniform(0.8, 1.2);\r\n sprite.velocityX = Math.cos(angleFromCenter) * velocity;\r\n sprite.velocityY = Math.sin(angleFromCenter) * velocity * -1;\r\n\r\n sprite.totalTime = 0;\r\n\r\n // Add it to the section & section list\r\n this.sections[sectionIndex].addChild(sprite);\r\n this.sectionSprites[sectionIndex].push(sprite);\r\n this.total_sprites++;\r\n\r\n return sprite;\r\n }\r\n\r\n /*\r\n Return true if the Sprite is outside the boundaries of the Canvas (plus whatever buffer is specified).\r\n */\r\n outside(sprite) {\r\n return sprite.x < this.BUFFER_LEFT ||\r\n sprite.x > this.BUFFER_RIGHT ||\r\n sprite.y > this.BUFFER_BOTTOM ||\r\n sprite.y < this.BUFFER_TOP;\r\n }\r\n\r\n /**\r\n * Ticking function for Manager object.\r\n * @param delta The time (in seconds) that passed between now and the last tick() call.\r\n */\r\n tick = (delta) => {\r\n delta *= this.TIME_SCALE;\r\n // Iterate through each section\r\n for (const [sectionIndex, section] of this.sections.entries()) {\r\n // Iterate through all sprites moving in that section\r\n for (const [spriteIndex, sprite] of this.sectionSprites[sectionIndex].entries()) {\r\n sprite.totalTime += delta;\r\n let scaleValue = sprite.totalTime / this.TIME_PERIOD;\r\n // let scaleValue = util.getDistanceSimple(0, 0, sprite.x, sprite.y) / this.MAX_DISTANCE;\r\n // distanceScale = Math.max(1, distanceScale + 0.3);\r\n let easeValue = this.EASING_FUNCTION(scaleValue);\r\n\r\n if (sprite.baselineScale < this.MAX_BASELINE_SCALE)\r\n sprite.baselineScale = Math.min(this.MAX_BASELINE_SCALE, sprite.baselineScale + (0.1 * delta * 0.25));\r\n\r\n let scale = sprite.baselineScale * Math.log(scaleValue + 1)\r\n sprite.scale.set(scale, scale);\r\n\r\n sprite.x += sprite.velocityX * delta * easeValue;\r\n sprite.y += sprite.velocityY * delta * easeValue;\r\n\r\n // Remove sprites outside view\r\n if (this.outside(sprite)) {\r\n sprite.visible = false;\r\n this.sprite_trash.push(sprite);\r\n this.sectionSprites[sectionIndex].splice(spriteIndex, 1);\r\n // section.removeChild(sprite);\r\n // sprite.destroy();\r\n this.total_sprites--;\r\n }\r\n }\r\n }\r\n\r\n // Generate one sprite on each tick if needed.\r\n if (this.total_sprites < this.MAX_SPRITE_COUNT) {\r\n this.generatePoint();\r\n }\r\n }\r\n}\r\n\r\nexport default Manager;","import { render } from \"./App.vue?vue&type=template&id=3b0dc164\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=3b0dc164&lang=css\"\n\nimport exportComponent from \"F:\\\\Programming\\\\Languages\\\\Vue.js\\\\lovely\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createApp } from 'vue'\nimport App from './App.vue'\n\ncreateApp(App).mount('#app')\n","var map = {\n\t\"./heart_with_arrow.png\": 9042,\n\t\"./heart_with_ribbon.png\": 4641,\n\t\"./heavy_heart_exclamation_mark_ornament.png\": 3965,\n\t\"./revolving_hearts.png\": 2363,\n\t\"./sparkles.png\": 3848,\n\t\"./sparkling_heart.png\": 8514\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 4807;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/lovely/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunklovely\"] = self[\"webpackChunklovely\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(2398); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["id","_createElementBlock","Easing","linear","t","inQuad","outQuad","inOutQuad","inCubic","outCubic","inOutCubic","inQuart","outQuart","inOutQuart","inQuint","outQuint","inOutQuint","inSine","Math","cos","PI","outSine","sin","inOutSine","inExpo","pow","outExpo","inOutExpo","inCirc","sqrt","outCirc","inOutCirc","inElastic","a","p","s","asin","outElastic","inOutElastic","inBack","v","outBack","inOutBack","inBounce","outBounce","inOutBounce","customArray","arr","getDistanceSimple","aX","aY","bX","bY","getDistance","b","x","y","getAngle","originX","originY","targetX","targetY","dx","dy","theta","atan2","toRadians","toDegrees","generateSections","sectionCount","data","baseAngle","section","startAngle","endAngle","centerAngle","velocityPoint","Point","push","randInt","min","max","floor","random","uniform","choice","array","length","this","pointInRectangle","center","height","width","widthOffset","heightOffset","pointInCircle","minRadius","maxRadius","radius","angle","spacedPointsInRectangle","minDistance","maxPoints","maxIterations","minX","minY","maxX","maxY","pointCount","iterations","points","newPoint","some","otherPoint","Manager","constructor","app","easing","delta","TIME_SCALE","sectionIndex","sections","entries","spriteIndex","sprite","sectionSprites","totalTime","scaleValue","TIME_PERIOD","easeValue","EASING_FUNCTION","baselineScale","MAX_BASELINE_SCALE","scale","log","set","velocityX","velocityY","outside","visible","sprite_trash","splice","total_sprites","MAX_SPRITE_COUNT","generatePoint","util","map","sectionData","container","PIXI","blurX","MOTION_BLUR_SCALE","blurY","filters","MotionBlurFilter","MOTION_BLUR_KERNEL_SIZE","stage","addChild","Array","from","BASE_ANGLE_DEG","BASE_ANGLE_RAD","WIDTH","screen","HEIGHT","LEFT","RIGHT","TOP","BOTTOM","POSITIONS","topLeft","topRight","bottomLeft","bottomRight","emojiList","textures","emoji_name","require","BUFFER_LEFT","REMOVAL_BUFFER","BUFFER_RIGHT","BUFFER_TOP","BUFFER_BOTTOM","MAX_DISTANCE","MAX_RADIUS","EDGE_BUFFER","point","MIN_RADIUS","shift","anchor","angleFromCenter","velocity","VELOCITY_SCALE","name","components","methods","drawPixi","canvas","document","getElementById","window","innerWidth","innerHeight","antialias","backgroundColor","view","specialStyle","fill","stroke","strokeThickness","centerText","manager","ticker","add","tick","mounted","__exports__","render","createApp","App","mount","webpackContext","req","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","key","r","n","getter","__esModule","d","definition","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/js/app.2bfe5028.js b/docs/js/app.44ad6398.js similarity index 70% rename from docs/js/app.2bfe5028.js rename to docs/js/app.44ad6398.js index 54bce5b..b59f0c8 100644 --- a/docs/js/app.2bfe5028.js +++ b/docs/js/app.44ad6398.js @@ -1,2 +1,2 @@ -(function(){var t={2398:function(t,n,i){"use strict";var e=i(9242),r=i(3396);const o={id:"pixi"};function s(t,n,i,e,s,u){return(0,r.wg)(),(0,r.iD)("canvas",o)}var u=i(1767),h=i(2482);const c={linear:function(){return function(t){return t}},inQuad:function(){return function(t){return t*t}},outQuad:function(){return function(t){return t*(2-t)}},inOutQuad:function(){return function(t){return t*=2,t<1?.5*t*t:-.5*(--t*(t-2)-1)}},inCubic:function(){return function(t){return t*t*t}},outCubic:function(){return function(t){return--t*t*t+1}},inOutCubic:function(){return function(t){return t*=2,t<1?.5*t*t*t:(t-=2,.5*(t*t*t+2))}},inQuart:function(){return function(t){return t*t*t*t}},outQuart:function(){return function(t){return 1- --t*t*t*t}},inOutQuart:function(){return function(t){return t*=2,t<1?.5*t*t*t*t:(t-=2,-.5*(t*t*t*t-2))}},inQuint:function(){return function(t){return t*t*t*t*t}},outQuint:function(){return function(t){return--t*t*t*t*t+1}},inOutQuint:function(){return function(t){return t*=2,t<1?.5*t*t*t*t*t:(t-=2,.5*(t*t*t*t*t+2))}},inSine:function(){return function(t){return 1-Math.cos(t*Math.PI/2)}},outSine:function(){return function(t){return Math.sin(t*Math.PI/2)}},inOutSine:function(){return function(t){return.5*(1-Math.cos(Math.PI*t))}},inExpo:function(){return function(t){return 0===t?0:Math.pow(1024,t-1)}},outExpo:function(){return function(t){return 1===t?1:1-Math.pow(2,-10*t)}},inOutExpo:function(){return function(t){return 0===t?0:1===t?1:(t*=2,t<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1))))}},inCirc:function(){return function(t){return 1-Math.sqrt(1-t*t)}},outCirc:function(){return function(t){return Math.sqrt(1- --t*t)}},inOutCirc:function(){return function(t){return t*=2,t<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-2)*(t-2))+1)}},inElastic:function(t=.1,n=.4){return function(i){let e;return 0===i?0:1===i?1:(!t||t<1?(t=1,e=n/4):e=n*Math.asin(1/t)/(2*Math.PI),-t*Math.pow(2,10*(i-1))*Math.sin((i-1-e)*(2*Math.PI)/n))}},outElastic:function(t=.1,n=.4){return function(i){let e;return 0===i?0:1===i?1:(!t||t<1?(t=1,e=n/4):e=n*Math.asin(1/t)/(2*Math.PI),t*Math.pow(2,-10*i)*Math.sin((i-e)*(2*Math.PI)/n)+1)}},inOutElastic:function(t=.1,n=.4){return function(i){let e;return 0===i?0:1===i?1:(!t||t<1?(t=1,e=n/4):e=n*Math.asin(1/t)/(2*Math.PI),i*=2,i<1?t*Math.pow(2,10*(i-1))*Math.sin((i-1-e)*(2*Math.PI)/n)*-.5:t*Math.pow(2,-10*(i-1))*Math.sin((i-1-e)*(2*Math.PI)/n)*.5+1)}},inBack:function(t){return function(n){let i=t||1.70158;return n*n*((i+1)*n-i)}},outBack:function(t){return function(n){let i=t||1.70158;return--n*n*((i+1)*n+i)+1}},inOutBack:function(t){return function(n){let i=1.525*(t||1.70158);return n*=2,n<1?n*n*((i+1)*n-i)*.5:.5*((n-2)*(n-2)*((i+1)*(n-2)+i)+2)}},inBounce:function(){return function(t){return 1-c.outBounce()(1-t)}},outBounce:function(){return function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?(t-=1.5/2.75,7.5625*t*t+.75):t<2.5/2.75?(t-=2.25/2.75,7.5625*t*t+.9375):(t-=2.625/2.75,7.5625*t*t+.984375)}},inOutBounce:function(){return function(t){return t<.5?.5*c.inBounce()(2*t):.5*c.outBounce()(2*t-1)+.5}},customArray:function(t){return t?function(t){return t}:c.linear()}};var a=c,f={getDistanceSimple(t,n,i,e){return Math.sqrt(Math.pow(t-i,2)+Math.pow(n-e,2))},getDistance(t,n){return Math.sqrt(Math.pow(t.x-n.x,2)+Math.pow(t.y-n.y,2))},getAngle(t,n,i,e){let r=t-i,o=n-e,s=Math.atan2(o,-r);return s*=180/Math.PI,s<0&&(s+=360),s},toRadians(t){return t/180*Math.PI},toDegrees(t){return t/Math.PI*180},generateSections(t){let n=[],i=2*Math.PI/t;for(let e=0;ethis.getDistance(t,n){t*=this.TIME_SCALE;for(const[n,i]of this.sections.entries())for(const[e,r]of this.sectionSprites[n].entries()){r.totalTime+=t;let i=r.totalTime/this.TIME_PERIOD,o=this.EASING_FUNCTION(i);r.baselineScale{const i=new u.W20;let e=n.velocityPoint.x*this.MOTION_BLUR_SCALE,r=n.velocityPoint.y*this.MOTION_BLUR_SCALE;return i.filters=[new l.R([e,r],this.MOTION_BLUR_KERNEL_SIZE)],t.stage.addChild(i),i})),this.sectionSprites=Array.from(Array(n),(()=>new Array(0))),this.BASE_ANGLE_DEG=360/this.sectionCount,this.BASE_ANGLE_RAD=2*Math.PI/this.sectionCount,this.WIDTH=t.screen.width,this.HEIGHT=t.screen.height,this.LEFT=-this.WIDTH/2,this.RIGHT=this.WIDTH/2,this.TOP=-this.HEIGHT/2,this.BOTTOM=this.HEIGHT/2,this.POSITIONS={topLeft:new u.E9j(-this.WIDTH/2,this.HEIGHT/2),topRight:new u.E9j(this.WIDTH/2,this.HEIGHT/2),bottomLeft:new u.E9j(-this.WIDTH/2,-this.HEIGHT/2),bottomRight:new u.E9j(this.WIDTH/2,-this.HEIGHT/2),center:new u.E9j(0,0)},this.emojiList=["heart_with_arrow","heart_with_ribbon","heavy_heart_exclamation_mark_ornament","revolving_hearts","sparkles","sparkling_heart"],this.textures=this.emojiList.map((t=>u.xEZ.from(i(4807)(`./${t}.png`)))),this.BUFFER_LEFT=this.LEFT-this.REMOVAL_BUFFER,this.BUFFER_RIGHT=this.RIGHT+this.REMOVAL_BUFFER,this.BUFFER_TOP=this.TOP-this.REMOVAL_BUFFER,this.BUFFER_BOTTOM=this.BOTTOM+this.REMOVAL_BUFFER,this.MAX_DISTANCE=f.getDistance(this.POSITIONS.topLeft,this.POSITIONS.center),this.total_sprites=0,this.MAX_RADIUS=Math.min(this.app.screen.width,this.app.screen.height)*(1-this.EDGE_BUFFER),this.sprite_trash=[]}generatePoint(){let t,n=p.pointInCircle(new u.E9j(0,0),this.MIN_RADIUS,this.MAX_RADIUS);this.sprite_trash.length<1?t=new u.jyi(p.choice(this.textures)):(t=this.sprite_trash.shift(),t.visible=!0),t.anchor.set(.5,.5),t.x=n.x,t.y=n.y,t.baselineScale=p.uniform(.05,.12),t.scale.set(0,0);const i=f.getAngle(0,0,n.x,n.y)*Math.PI/180,e=Math.floor(i/this.BASE_ANGLE_RAD),r=this.VELOCITY_SCALE*p.uniform(.8,1.2);return t.velocityX=Math.cos(i)*r,t.velocityY=Math.sin(i)*r*-1,t.totalTime=0,this.sections[e].addChild(t),this.sectionSprites[e].push(t),this.total_sprites++,t}outside(t){return t.xthis.BUFFER_RIGHT||t.y>this.BUFFER_BOTTOM||t.y=o)&&Object.keys(i.O).every((function(t){return i.O[t](e[h])}))?e.splice(h--,1):(u=!1,o0&&t[a-1][2]>o;a--)t[a]=t[a-1];t[a]=[e,r,o]}}(),function(){i.n=function(t){var n=t&&t.__esModule?function(){return t["default"]}:function(){return t};return i.d(n,{a:n}),n}}(),function(){i.d=function(t,n){for(var e in n)i.o(n,e)&&!i.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})}}(),function(){i.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"===typeof window)return window}}()}(),function(){i.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)}}(),function(){i.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t}}(),function(){i.p="/lovely/"}(),function(){var t={143:0};i.O.j=function(n){return 0===t[n]};var n=function(n,e){var r,o,s=e[0],u=e[1],h=e[2],c=0;if(s.some((function(n){return 0!==t[n]}))){for(r in u)i.o(u,r)&&(i.m[r]=u[r]);if(h)var a=h(i)}for(n&&n(e);cthis.getDistance(t,n){t*=this.TIME_SCALE;for(const[n,i]of this.sections.entries())for(const[e,r]of this.sectionSprites[n].entries()){r.totalTime+=t;let i=r.totalTime/this.TIME_PERIOD,o=this.EASING_FUNCTION(i);r.baselineScale{const i=new u.W20;let e=n.velocityPoint.x*this.MOTION_BLUR_SCALE,r=n.velocityPoint.y*this.MOTION_BLUR_SCALE;return i.filters=[new l.R([e,r],this.MOTION_BLUR_KERNEL_SIZE)],t.stage.addChild(i),i})),this.sectionSprites=Array.from(Array(n),(()=>new Array(0))),this.BASE_ANGLE_DEG=360/this.sectionCount,this.BASE_ANGLE_RAD=2*Math.PI/this.sectionCount,this.WIDTH=t.screen.width,this.HEIGHT=t.screen.height,this.LEFT=-this.WIDTH/2,this.RIGHT=this.WIDTH/2,this.TOP=-this.HEIGHT/2,this.BOTTOM=this.HEIGHT/2,this.POSITIONS={topLeft:new u.E9j(-this.WIDTH/2,this.HEIGHT/2),topRight:new u.E9j(this.WIDTH/2,this.HEIGHT/2),bottomLeft:new u.E9j(-this.WIDTH/2,-this.HEIGHT/2),bottomRight:new u.E9j(this.WIDTH/2,-this.HEIGHT/2),center:new u.E9j(0,0)},this.emojiList=["heart_with_arrow","heart_with_ribbon","heavy_heart_exclamation_mark_ornament","revolving_hearts","sparkles","sparkling_heart"],this.textures=this.emojiList.map((t=>u.xEZ.from(i(4807)(`./${t}.png`)))),this.BUFFER_LEFT=this.LEFT-this.REMOVAL_BUFFER,this.BUFFER_RIGHT=this.RIGHT+this.REMOVAL_BUFFER,this.BUFFER_TOP=this.TOP-this.REMOVAL_BUFFER,this.BUFFER_BOTTOM=this.BOTTOM+this.REMOVAL_BUFFER,this.MAX_DISTANCE=f.getDistance(this.POSITIONS.topLeft,this.POSITIONS.center),this.total_sprites=0,this.MAX_RADIUS=Math.min(this.app.screen.width,this.app.screen.height)*(1-this.EDGE_BUFFER),this.sprite_trash=[]}generatePoint(){let t,n=p.pointInCircle(new u.E9j(0,0),this.MIN_RADIUS,this.MAX_RADIUS);this.sprite_trash.length<1?t=new u.jyi(p.choice(this.textures)):(t=this.sprite_trash.shift(),t.visible=!0),t.anchor.set(.5,.5),t.x=n.x,t.y=n.y,t.baselineScale=p.uniform(.05,.12),t.scale.set(0,0);const i=f.getAngle(0,0,n.x,n.y)*Math.PI/180,e=Math.floor(i/this.BASE_ANGLE_RAD),r=this.VELOCITY_SCALE*p.uniform(.8,1.2);return t.velocityX=Math.cos(i)*r,t.velocityY=Math.sin(i)*r*-1,t.totalTime=0,this.sections[e].addChild(t),this.sectionSprites[e].push(t),this.total_sprites++,t}outside(t){return t.xthis.BUFFER_RIGHT||t.y>this.BUFFER_BOTTOM||t.y=o)&&Object.keys(i.O).every((function(t){return i.O[t](e[h])}))?e.splice(h--,1):(u=!1,o0&&t[a-1][2]>o;a--)t[a]=t[a-1];t[a]=[e,r,o]}}(),function(){i.n=function(t){var n=t&&t.__esModule?function(){return t["default"]}:function(){return t};return i.d(n,{a:n}),n}}(),function(){i.d=function(t,n){for(var e in n)i.o(n,e)&&!i.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})}}(),function(){i.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"===typeof window)return window}}()}(),function(){i.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)}}(),function(){i.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t}}(),function(){i.p="/lovely/"}(),function(){var t={143:0};i.O.j=function(n){return 0===t[n]};var n=function(n,e){var r,o,s=e[0],u=e[1],h=e[2],c=0;if(s.some((function(n){return 0!==t[n]}))){for(r in u)i.o(u,r)&&(i.m[r]=u[r]);if(h)var a=h(i)}for(n&&n(e);c\n \n\n\n\n\n\n","const Easing = {\r\n linear: function () {\r\n return function (t) {\r\n return t;\r\n };\r\n },\r\n\r\n inQuad: function () {\r\n return function (t) {\r\n return t * t;\r\n };\r\n },\r\n\r\n outQuad: function () {\r\n return function (t) {\r\n return t * (2 - t);\r\n };\r\n },\r\n\r\n inOutQuad: function () {\r\n return function (t) {\r\n t *= 2;\r\n if (t < 1) return 0.5 * t * t;\r\n return -0.5 * (--t * (t - 2) - 1);\r\n };\r\n },\r\n\r\n inCubic: function () {\r\n return function (t) {\r\n return t * t * t;\r\n };\r\n },\r\n\r\n outCubic: function () {\r\n return function (t) {\r\n return --t * t * t + 1;\r\n };\r\n },\r\n\r\n inOutCubic: function () {\r\n return function (t) {\r\n t *= 2;\r\n if (t < 1) return 0.5 * t * t * t;\r\n t -= 2\r\n return 0.5 * (t * t * t + 2);\r\n };\r\n },\r\n\r\n inQuart: function () {\r\n return function (t) {\r\n return t * t * t * t;\r\n };\r\n },\r\n\r\n outQuart: function () {\r\n return function (t) {\r\n return 1 - (--t * t * t * t);\r\n };\r\n },\r\n\r\n inOutQuart: function () {\r\n return function (t) {\r\n t *= 2;\r\n if (t < 1) return 0.5 * t * t * t * t;\r\n t -= 2;\r\n return -0.5 * (t * t * t * t - 2);\r\n };\r\n },\r\n\r\n inQuint: function () {\r\n return function (t) {\r\n return t * t * t * t * t;\r\n };\r\n },\r\n\r\n outQuint: function () {\r\n return function (t) {\r\n return --t * t * t * t * t + 1;\r\n };\r\n },\r\n\r\n inOutQuint: function () {\r\n return function (t) {\r\n t *= 2;\r\n if (t < 1) return 0.5 * t * t * t * t * t;\r\n t -= 2;\r\n return 0.5 * (t * t * t * t * t + 2);\r\n };\r\n },\r\n\r\n inSine: function () {\r\n return function (t) {\r\n return 1 - Math.cos(t * Math.PI / 2);\r\n };\r\n },\r\n\r\n outSine: function () {\r\n return function (t) {\r\n return Math.sin(t * Math.PI / 2);\r\n };\r\n },\r\n\r\n inOutSine: function () {\r\n return function (t) {\r\n return 0.5 * (1 - Math.cos(Math.PI * t));\r\n };\r\n },\r\n\r\n inExpo: function () {\r\n return function (t) {\r\n return t === 0 ? 0 : Math.pow(1024, t - 1);\r\n };\r\n },\r\n\r\n outExpo: function () {\r\n return function (t) {\r\n return t === 1 ? 1 : 1 - Math.pow(2, -10 * t);\r\n };\r\n },\r\n\r\n inOutExpo: function () {\r\n return function (t) {\r\n if (t === 0) return 0;\r\n if (t === 1) return 1;\r\n t *= 2;\r\n if (t < 1) return 0.5 * Math.pow(1024, t - 1);\r\n return 0.5 * (-Math.pow(2, -10 * (t - 1)) + 2);\r\n };\r\n },\r\n\r\n inCirc: function () {\r\n return function (t) {\r\n return 1 - Math.sqrt(1 - t * t);\r\n };\r\n },\r\n\r\n outCirc: function () {\r\n return function (t) {\r\n return Math.sqrt(1 - (--t * t));\r\n };\r\n },\r\n\r\n inOutCirc: function () {\r\n return function (t) {\r\n t *= 2\r\n if (t < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1);\r\n return 0.5 * (Math.sqrt(1 - (t - 2) * (t - 2)) + 1);\r\n };\r\n },\r\n\r\n\r\n inElastic: function (a = 0.1, p = 0.4) {\r\n return function (t) {\r\n let s;\r\n if (t === 0) return 0;\r\n if (t === 1) return 1;\r\n if (!a || a < 1) {\r\n a = 1;\r\n s = p / 4;\r\n } else s = p * Math.asin(1 / a) / (2 * Math.PI);\r\n return -(a * Math.pow(2, 10 * (t - 1)) * Math.sin(((t - 1) - s) * (2 * Math.PI) / p));\r\n };\r\n },\r\n\r\n outElastic: function (a = 0.1, p = 0.4) {\r\n return function (t) {\r\n let s;\r\n if (t === 0) return 0;\r\n if (t === 1) return 1;\r\n if (!a || a < 1) {\r\n a = 1;\r\n s = p / 4;\r\n } else s = p * Math.asin(1 / a) / (2 * Math.PI);\r\n return (a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1);\r\n };\r\n },\r\n\r\n inOutElastic: function (a = 0.1, p = 0.4) {\r\n return function (t) {\r\n let s;\r\n if (t === 0) return 0;\r\n if (t === 1) return 1;\r\n if (!a || a < 1) {\r\n a = 1;\r\n s = p / 4;\r\n } else s = p * Math.asin(1 / a) / (2 * Math.PI);\r\n t *= 2;\r\n if (t < 1) return -0.5 * (a * Math.pow(2, 10 * (t - 1)) * Math.sin(((t - 1) - s) * (2 * Math.PI) / p));\r\n return a * Math.pow(2, -10 * (t - 1)) * Math.sin(((t - 1) - s) * (2 * Math.PI) / p) * 0.5 + 1;\r\n };\r\n },\r\n\r\n inBack: function (v) {\r\n return function (t) {\r\n let s = v || 1.70158;\r\n return t * t * ((s + 1) * t - s);\r\n };\r\n },\r\n\r\n outBack: function (v) {\r\n return function (t) {\r\n let s = v || 1.70158;\r\n return --t * t * ((s + 1) * t + s) + 1;\r\n };\r\n },\r\n\r\n inOutBack: function (v) {\r\n return function (t) {\r\n let s = (v || 1.70158) * 1.525;\r\n t *= 2;\r\n if (t < 1) return 0.5 * (t * t * ((s + 1) * t - s));\r\n return 0.5 * ((t - 2) * (t - 2) * ((s + 1) * (t - 2) + s) + 2);\r\n };\r\n },\r\n\r\n inBounce: function () {\r\n return function (t) {\r\n return 1 - Easing.outBounce()(1 - t);\r\n };\r\n },\r\n\r\n outBounce: function () {\r\n return function (t) {\r\n if (t < (1 / 2.75)) {\r\n return 7.5625 * t * t;\r\n } else if (t < (2 / 2.75)) {\r\n t = (t - (1.5 / 2.75));\r\n return 7.5625 * t * t + 0.75;\r\n } else if (t < (2.5 / 2.75)) {\r\n t = (t - (2.25 / 2.75));\r\n return 7.5625 * t * t + 0.9375;\r\n } else {\r\n t -= (2.625 / 2.75);\r\n return 7.5625 * t * t + 0.984375;\r\n }\r\n };\r\n },\r\n\r\n inOutBounce: function () {\r\n return function (t) {\r\n if (t < 0.5) return Easing.inBounce()(t * 2) * 0.5;\r\n return Easing.outBounce()(t * 2 - 1) * 0.5 + 0.5;\r\n };\r\n },\r\n\r\n customArray: function (arr) {\r\n if (!arr) return Easing.linear();\r\n return function (t) {\r\n //todo: convert array => ease\r\n return t;\r\n }\r\n }\r\n};\r\n\r\nexport default Easing;\r\n","import {Point} from \"pixi.js\";\r\n\r\nexport default {\r\n getDistanceSimple(aX, aY, bX, bY) {\r\n return Math.sqrt(Math.pow(aX - bX, 2) + Math.pow(aY - bY, 2))\r\n },\r\n getDistance(a, b) {\r\n return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2))\r\n },\r\n getAngle(originX, originY, targetX, targetY) {\r\n let dx = originX - targetX, dy = originY - targetY;\r\n\r\n let theta = Math.atan2(dy, -dx); // [0, Ⲡ] then [-Ⲡ, 0]; anticlockwise; 0° = east\r\n theta *= 180 / Math.PI; // [0, 180] then [-180, 0]; anticlockwise; 0° = east\r\n if (theta < 0) theta += 360; // [0, 360]; anticlockwise; 0° = east\r\n\r\n return theta;\r\n },\r\n /**\r\n * Converts an angle in degrees to radians\r\n * @param theta An angle in degrees.\r\n * @returns {number} An angle in radians.\r\n */\r\n toRadians(theta) {\r\n return theta / 180 * Math.PI;\r\n },\r\n /**\r\n * Converts an angle in radians to degrees.\r\n * @param theta An angle in radians.\r\n * @returns {number} An angle in degrees.\r\n */\r\n toDegrees(theta) {\r\n return theta / Math.PI * 180;\r\n },\r\n /**\r\n * Generates a number of sections and returns basic generation data to assist initialization of the canvas.\r\n * @param sectionCount The number of sections a 360 degree / 2pi area should be split up into.\r\n * @returns {*[]} Returns an array of objects containing useful pre-generated angles & data.\r\n */\r\n generateSections(sectionCount) {\r\n let data = [];\r\n let baseAngle = (2 * Math.PI) / sectionCount;\r\n for (let section = 0; section < sectionCount; section++) {\r\n let startAngle = baseAngle * section;\r\n let endAngle = startAngle + baseAngle;\r\n let centerAngle = startAngle + (baseAngle / 2.0);\r\n let velocityPoint = new Point(-Math.cos(centerAngle), Math.sin(centerAngle));\r\n data.push({startAngle, centerAngle, endAngle, velocityPoint});\r\n }\r\n return data;\r\n }\r\n}","import {Point} from \"pixi.js\";\r\n\r\nexport default {\r\n /**\r\n * Returns a random integer value from [min, max].\r\n * @param min The minimum integer value to be returned (inclusive).\r\n * @param max The maximum integer value to be returned (inclusive).\r\n * @returns {number} A random integer value.\r\n */\r\n randInt(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1) + min)\r\n },\r\n /**\r\n * Returns a floating point value from [min, max).\r\n * @param min The minimum value (inclusive) to be returned.\r\n * @param max The maximum value (non-inclusive) to be returned.\r\n * @returns {*} A random floating point value.\r\n */\r\n uniform(min, max) {\r\n return (Math.random() * (max - min)) + min;\r\n },\r\n /**\r\n * Returns a random item from inside the array.\r\n * @param array An array of any length.\r\n * @returns {null|*} Returns an item if there is at least 1 item inside the array. Otherwise, returns null.\r\n */\r\n choice: function (array) {\r\n if (array.length < 1) return null;\r\n else if (array.length === 1) return array[0];\r\n return array[this.randInt(0, array.length - 1)];\r\n },\r\n /**\r\n * Generates a point inside a rectangle defined by its center and a width & height.\r\n * May not be the most efficient method, but it's fine for now.\r\n * @param center The center of the rectangle.\r\n * @param height The height of the rectangle.\r\n * @param width The width of the rectangle.\r\n * @returns {Point} A point inside the rectangle defined by these arguments.\r\n */\r\n pointInRectangle(center, height, width) {\r\n let widthOffset = width / 2.0, heightOffset = height / 2.0;\r\n return new Point(\r\n this.uniform(center.x - widthOffset, center.y + widthOffset),\r\n this.uniform(center.y - heightOffset, center.y + heightOffset));\r\n },\r\n /**\r\n * Generates a random point inside a circle (or disc, if minRadius > 0).\r\n * @param center The position at which the circle is centered on.\r\n * @param minRadius The minimum radius the point could be from the center.\r\n * @param maxRadius The maximum radius the point could be from the center.\r\n * @returns {Point} A point inside the disc.\r\n */\r\n pointInCircle(center, minRadius, maxRadius) {\r\n const radius = this.uniform(minRadius, maxRadius);\r\n const angle = this.uniform(0, Math.PI * 2);\r\n return new Point(\r\n Math.cos(angle) * radius + center.x,\r\n Math.sin(angle) * radius + center.y\r\n );\r\n },\r\n /**\r\n *\r\n * @param min A point object representing the minimum X and Y values to be generated.\r\n * @param max A point object representing the maximum X and Y values to be generated.\r\n * @param minDistance The minimum distance each point must be from each other.\r\n * @param maxPoints The maximum number of points to be generated.\r\n * @param maxIterations The maximum number of generation attempts to be made before generating.\r\n * @returns {*[]} An array containing up to {maxPoints} points.\r\n */\r\n spacedPointsInRectangle(min, max, minDistance, maxPoints, maxIterations) {\r\n const minX = min.x;\r\n const minY = min.y;\r\n const maxX = max.x;\r\n const maxY = max.y;\r\n let pointCount = 0;\r\n let iterations = 0;\r\n let points = [];\r\n\r\n // Generate a point until both maximums are satisfied\r\n while (pointCount < maxPoints && iterations < maxIterations) {\r\n iterations++;\r\n let newPoint = new Point(this.uniform(minX, maxX), this.uniform(minY, maxY));\r\n if (!points.some((otherPoint) => this.getDistance(newPoint, otherPoint) < minDistance)) {\r\n pointCount++;\r\n points.push(newPoint);\r\n }\r\n }\r\n return points\r\n }\r\n};","import * as PIXI from 'pixi.js'\r\nimport {Point} from \"pixi.js\";\r\nimport easing from \"@/easing\";\r\nimport util from \"@/util\";\r\nimport {MotionBlurFilter} from \"@pixi/filter-motion-blur\";\r\nimport random from \"@/random\";\r\n\r\nclass Manager {\r\n REMOVAL_BUFFER = 100 // The buffer zone for sprite removal to prevent sprites from being deleted before they are entirely out of view.\r\n MAX_BASELINE_SCALE = 0.65; // Maximum scaling constant for sprites.\r\n MAX_SPRITE_COUNT = 200; // The maximum number of sprites that should be rendered at once.\r\n EASING_FUNCTION = easing.outExpo(); // The easing function that controls movement & scaling easing.\r\n MOTION_BLUR_KERNEL_SIZE = 3; // Controls motion blur quality.\r\n MOTION_BLUR_SCALE = 7; // The maximum scale motion blur can be in either X or Y.\r\n VELOCITY_SCALE = 3;\r\n TIME_PERIOD = 60;\r\n EDGE_BUFFER = 0.15;\r\n MIN_RADIUS = 30;\r\n TIME_SCALE = 2.8;\r\n\r\n constructor(app, sectionCount) {\r\n this.app = app;\r\n\r\n this.sectionCount = sectionCount;\r\n // A list of containers with separate sections of items relegated by their angle.\r\n this.sections = util.generateSections(sectionCount).map((sectionData) => {\r\n const container = new PIXI.Container();\r\n let blurX = sectionData.velocityPoint.x * this.MOTION_BLUR_SCALE,\r\n blurY = sectionData.velocityPoint.y * this.MOTION_BLUR_SCALE;\r\n container.filters = [new MotionBlurFilter([blurX, blurY], this.MOTION_BLUR_KERNEL_SIZE)]\r\n app.stage.addChild(container);\r\n return container;\r\n });\r\n\r\n this.sectionSprites = Array.from(Array(sectionCount), () => new Array(0))\r\n\r\n // Section Constants\r\n this.BASE_ANGLE_DEG = 360 / this.sectionCount;\r\n this.BASE_ANGLE_RAD = (Math.PI * 2) / this.sectionCount;\r\n\r\n // Geometric Constants\r\n this.WIDTH = app.screen.width;\r\n this.HEIGHT = app.screen.height;\r\n this.LEFT = -this.WIDTH / 2;\r\n this.RIGHT = this.WIDTH / 2;\r\n this.TOP = -this.HEIGHT / 2;\r\n this.BOTTOM = this.HEIGHT / 2;\r\n\r\n // Position Constants\r\n this.POSITIONS = {\r\n topLeft: new Point(-this.WIDTH / 2, this.HEIGHT / 2),\r\n topRight: new Point(this.WIDTH / 2, this.HEIGHT / 2),\r\n bottomLeft: new Point(-this.WIDTH / 2, -this.HEIGHT / 2),\r\n bottomRight: new Point(this.WIDTH / 2, -this.HEIGHT / 2),\r\n center: new Point(0, 0)\r\n }\r\n\r\n // A list of texture names for the emojis to be used.\r\n this.emojiList = [\"heart_with_arrow\",\r\n \"heart_with_ribbon\",\r\n \"heavy_heart_exclamation_mark_ornament\",\r\n \"revolving_hearts\",\r\n \"sparkles\",\r\n \"sparkling_heart\"];\r\n\r\n // Load all textures into memory\r\n this.textures = this.emojiList.map(\r\n (emoji_name) => PIXI.Texture.from(require(`./assets/emojis/${emoji_name}.png`))\r\n );\r\n\r\n // Buffer size constants\r\n this.BUFFER_LEFT = this.LEFT - this.REMOVAL_BUFFER;\r\n this.BUFFER_RIGHT = this.RIGHT + this.REMOVAL_BUFFER;\r\n this.BUFFER_TOP = this.TOP - this.REMOVAL_BUFFER;\r\n this.BUFFER_BOTTOM = this.BOTTOM + this.REMOVAL_BUFFER;\r\n\r\n this.MAX_DISTANCE = util.getDistance(this.POSITIONS.topLeft, this.POSITIONS.center);\r\n this.total_sprites = 0;\r\n\r\n // Generation Constants\r\n this.MAX_RADIUS = Math.min(this.app.screen.width, this.app.screen.height) * (1 - this.EDGE_BUFFER);\r\n\r\n // Sprites that have gone out of boundary and need to be used.\r\n this.sprite_trash = [];\r\n }\r\n\r\n /**\r\n * Generate a new point and automatically add it to the container.\r\n */\r\n generatePoint() {\r\n // Generation initial data on the point\r\n let point = random.pointInCircle(new Point(0, 0), this.MIN_RADIUS, this.MAX_RADIUS);\r\n let sprite;\r\n\r\n // Acquire sprite object.\r\n if (this.sprite_trash.length < 1) {\r\n sprite = new PIXI.Sprite(random.choice(this.textures));\r\n } else {\r\n sprite = this.sprite_trash.shift();\r\n sprite.visible = true;\r\n }\r\n\r\n // Place the sprite at the point\r\n sprite.anchor.set(0.5, 0.5);\r\n sprite.x = point.x;\r\n sprite.y = point.y;\r\n\r\n // Set scale\r\n sprite.baselineScale = random.uniform(0.05, 0.12)\r\n sprite.scale.set(0, 0)\r\n\r\n // Get the correct section & velocity for the sprite\r\n const angleFromCenter = util.getAngle(0, 0, point.x, point.y) * Math.PI / 180;\r\n const sectionIndex = Math.floor(angleFromCenter / this.BASE_ANGLE_RAD);\r\n const velocity = this.VELOCITY_SCALE * random.uniform(0.8, 1.2);\r\n sprite.velocityX = Math.cos(angleFromCenter) * velocity;\r\n sprite.velocityY = Math.sin(angleFromCenter) * velocity * -1;\r\n\r\n sprite.totalTime = 0;\r\n\r\n // Add it to the section & section list\r\n this.sections[sectionIndex].addChild(sprite);\r\n this.sectionSprites[sectionIndex].push(sprite);\r\n this.total_sprites++;\r\n\r\n return sprite;\r\n }\r\n\r\n /*\r\n Return true if the Sprite is outside the boundaries of the Canvas (plus whatever buffer is specified).\r\n */\r\n outside(sprite) {\r\n return sprite.x < this.BUFFER_LEFT ||\r\n sprite.x > this.BUFFER_RIGHT ||\r\n sprite.y > this.BUFFER_BOTTOM ||\r\n sprite.y < this.BUFFER_TOP;\r\n }\r\n\r\n /**\r\n * Ticking function for Manager object.\r\n * @param delta The time (in seconds) that passed between now and the last tick() call.\r\n */\r\n tick = (delta) => {\r\n delta *= this.TIME_SCALE;\r\n // Iterate through each section\r\n for (const [sectionIndex, section] of this.sections.entries()) {\r\n // Iterate through all sprites moving in that section\r\n for (const [spriteIndex, sprite] of this.sectionSprites[sectionIndex].entries()) {\r\n sprite.totalTime += delta;\r\n let scaleValue = sprite.totalTime / this.TIME_PERIOD;\r\n // let scaleValue = util.getDistanceSimple(0, 0, sprite.x, sprite.y) / this.MAX_DISTANCE;\r\n // distanceScale = Math.max(1, distanceScale + 0.3);\r\n let easeValue = this.EASING_FUNCTION(scaleValue);\r\n\r\n if (sprite.baselineScale < this.MAX_BASELINE_SCALE)\r\n sprite.baselineScale = Math.min(this.MAX_BASELINE_SCALE, sprite.baselineScale + (0.1 * delta * 0.25));\r\n\r\n let scale = sprite.baselineScale * Math.log(scaleValue + 1)\r\n sprite.scale.set(scale, scale);\r\n\r\n sprite.x += sprite.velocityX * delta * easeValue;\r\n sprite.y += sprite.velocityY * delta * easeValue;\r\n\r\n // Remove sprites outside view\r\n if (this.outside(sprite)) {\r\n sprite.visible = false;\r\n this.sprite_trash.push(sprite);\r\n this.sectionSprites[sectionIndex].splice(spriteIndex, 1);\r\n // section.removeChild(sprite);\r\n // sprite.destroy();\r\n this.total_sprites--;\r\n }\r\n }\r\n }\r\n\r\n // Generate one sprite on each tick if needed.\r\n if (this.total_sprites < this.MAX_SPRITE_COUNT) {\r\n this.generatePoint();\r\n }\r\n }\r\n}\r\n\r\nexport default Manager;","import { render } from \"./App.vue?vue&type=template&id=421587c0\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=421587c0&lang=css\"\n\nimport exportComponent from \"F:\\\\Programming\\\\Languages\\\\Vue.js\\\\lovely\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createApp } from 'vue'\nimport App from './App.vue'\n\ncreateApp(App).mount('#app')\n","var map = {\n\t\"./heart_with_arrow.png\": 9042,\n\t\"./heart_with_ribbon.png\": 4641,\n\t\"./heavy_heart_exclamation_mark_ornament.png\": 3965,\n\t\"./revolving_hearts.png\": 2363,\n\t\"./sparkles.png\": 3848,\n\t\"./sparkling_heart.png\": 8514\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 4807;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/lovely/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunklovely\"] = self[\"webpackChunklovely\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(3331); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["id","_createElementBlock","Easing","linear","t","inQuad","outQuad","inOutQuad","inCubic","outCubic","inOutCubic","inQuart","outQuart","inOutQuart","inQuint","outQuint","inOutQuint","inSine","Math","cos","PI","outSine","sin","inOutSine","inExpo","pow","outExpo","inOutExpo","inCirc","sqrt","outCirc","inOutCirc","inElastic","a","p","s","asin","outElastic","inOutElastic","inBack","v","outBack","inOutBack","inBounce","outBounce","inOutBounce","customArray","arr","getDistanceSimple","aX","aY","bX","bY","getDistance","b","x","y","getAngle","originX","originY","targetX","targetY","dx","dy","theta","atan2","toRadians","toDegrees","generateSections","sectionCount","data","baseAngle","section","startAngle","endAngle","centerAngle","velocityPoint","Point","push","randInt","min","max","floor","random","uniform","choice","array","length","this","pointInRectangle","center","height","width","widthOffset","heightOffset","pointInCircle","minRadius","maxRadius","radius","angle","spacedPointsInRectangle","minDistance","maxPoints","maxIterations","minX","minY","maxX","maxY","pointCount","iterations","points","newPoint","some","otherPoint","Manager","constructor","app","easing","delta","TIME_SCALE","sectionIndex","sections","entries","spriteIndex","sprite","sectionSprites","totalTime","scaleValue","TIME_PERIOD","easeValue","EASING_FUNCTION","baselineScale","MAX_BASELINE_SCALE","scale","log","set","velocityX","velocityY","outside","visible","sprite_trash","splice","total_sprites","MAX_SPRITE_COUNT","generatePoint","util","map","sectionData","container","PIXI","blurX","MOTION_BLUR_SCALE","blurY","filters","MotionBlurFilter","MOTION_BLUR_KERNEL_SIZE","stage","addChild","Array","from","BASE_ANGLE_DEG","BASE_ANGLE_RAD","WIDTH","screen","HEIGHT","LEFT","RIGHT","TOP","BOTTOM","POSITIONS","topLeft","topRight","bottomLeft","bottomRight","emojiList","textures","emoji_name","require","BUFFER_LEFT","REMOVAL_BUFFER","BUFFER_RIGHT","BUFFER_TOP","BUFFER_BOTTOM","MAX_DISTANCE","MAX_RADIUS","EDGE_BUFFER","point","MIN_RADIUS","shift","anchor","angleFromCenter","velocity","VELOCITY_SCALE","name","components","methods","drawPixi","canvas","document","getElementById","resizeTo","window","antialias","backgroundColor","view","specialStyle","fill","stroke","strokeThickness","centerText","manager","ticker","add","tick","mounted","__exports__","render","createApp","App","mount","webpackContext","req","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","key","r","n","getter","__esModule","d","definition","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index 2231ff1..ab3168f 100644 --- a/src/App.vue +++ b/src/App.vue @@ -13,8 +13,7 @@ export default { drawPixi: function () { const canvas = document.getElementById('pixi') const app = new PIXI.Application({ - width: window.innerWidth, - height: window.innerHeight, + resizeTo: window, antialias: true, backgroundColor: 0x171717, view: canvas, @@ -71,7 +70,8 @@ export default {