diff --git a/CREDITS.md b/CREDITS.md new file mode 100644 index 0000000..f394a63 --- /dev/null +++ b/CREDITS.md @@ -0,0 +1,25 @@ +# Graphics + +- Title screen background: [Star Nest by Pablo Roman Andrioli](https://www.shadertoy.com/view/XlfGRj) (MIT) + +# Music + +- Title screen music: [Je suis un Phoenix by BlueMillenium](http://ccmixter.org/files/Bluemillenium/61325) (CC BY-NC 3.0) + +# Sound effects + +- Door open/close sounds: + - [Hatch Seal.wav by Paul368 (freesound)](https://freesound.org/people/Paul368/sounds/264063/) (CC0 1.0) + - [SFX Door Open.wav by Paul368 (freesound)](https://freesound.org/people/Paul368/sounds/264061/) (CC0 1.0) +- Notification/beeps: + - [Chord Alert Notification by graham_makes (freesound)](https://freesound.org/people/graham_makes/sounds/457518/) (CC BY 3.0) + - [Messenger Notification Sounds by zzwerty (freesound)](https://freesound.org/people/zzwerty/sounds/315878/) (CC BY-NC 3.0) + - [Radio Sign Off by dylanh.sound (freesound)](https://freesound.org/people/dylanh.sound/sounds/524205/) (CC0 1.0) + +# Code + +- [React](https://github.com/facebook/react) (MIT) +- [PixiJS](https://github.com/pixijs/pixi.js) (MIT) +- [howler.js](https://github.com/goldfire/howler.js) (MIT) +- [Parcel](https://github.com/parcel-bundler/parcel) (MIT) +- [Hotkeys](https://github.com/jaywcjlove/hotkeys) (MIT) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..48d301f --- /dev/null +++ b/LICENSE @@ -0,0 +1,5 @@ +Copyright 2020 Alessandro Gatti + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..872dfb8 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# NSS Odyssey + +**Warning: Toy project** + +Co-op survival space sim, keep the NSS Odyssey alive and kicking while roaming in space. + +Takes heavy inspiration from Space Station 13 and FTL. + +## Credits + +See `CREDITS.md` for an exhaustive list of sources for all assets not made by me (Hamcha) + +See `LICENSE` for code license (TL;DR it's [ISC](https://en.wikipedia.org/wiki/ISC_license)) diff --git a/assets/images/noise/space_fine.png b/assets/images/noise/space_fine.png new file mode 100644 index 0000000..2a69e76 Binary files /dev/null and b/assets/images/noise/space_fine.png differ diff --git a/assets/images/noise/space_sparse.png b/assets/images/noise/space_sparse.png new file mode 100644 index 0000000..dae9af8 Binary files /dev/null and b/assets/images/noise/space_sparse.png differ diff --git a/package.json b/package.json index 4875f1a..79517f0 100644 --- a/package.json +++ b/package.json @@ -4,11 +4,17 @@ "main": "index.js", "license": "MIT", "dependencies": { + "@inlet/react-pixi": "^5.1.4", "@types/howler": "^2.2.1", + "@types/react": "^16.9.49", + "@types/react-dom": "^16.9.8", + "animejs": "^3.2.0", "hotkeys-js": "^3.8.1", "howler": "^2.2.0", "parcel-bundler": "^1.12.4", "pixi.js": "^5.3.3", + "react": "^16.13.1", + "react-dom": "^16.13.1", "typescript": "^4.0.3" }, "scripts": { @@ -16,6 +22,8 @@ "clean": "rimraf ./dist" }, "devDependencies": { + "glslify-bundle": "^5.1.1", + "glslify-deps": "^1.3.1", "rimraf": "^3.0.2", "sass": "^1.26.11" } diff --git a/src/game/MenuBackground.tsx b/src/game/MenuBackground.tsx new file mode 100644 index 0000000..79740e1 --- /dev/null +++ b/src/game/MenuBackground.tsx @@ -0,0 +1,20 @@ +import * as React from "react"; +import MenuBackgroundFilter from "../graphics/filters/MenuBackground"; +import { Sprite, useApp, useTick } from "@inlet/react-pixi"; + +export default function () { + const app = useApp(); + const scale = 2; + const menubg = new MenuBackgroundFilter(app.renderer, scale); + + useTick((delta) => { + menubg.update(delta); + menubg.render(); + }); + + window.addEventListener("resize", () => { + menubg.rescale(scale); + }); + + return ; +} diff --git a/src/game/lib/hook.ts b/src/game/lib/hook.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/graphics/filters/InGameSpace.ts b/src/graphics/filters/InGameSpace.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/graphics/filters/MenuBackground.tsx b/src/graphics/filters/MenuBackground.tsx new file mode 100644 index 0000000..5c78788 --- /dev/null +++ b/src/graphics/filters/MenuBackground.tsx @@ -0,0 +1,33 @@ +import * as PIXI from "pixi.js"; +import RTTShader from "../utils/RTTShader"; + +//@ts-expect-error Frag file +import filter_src from "./frag/MenuBackground.frag"; + +export default class MenuBackgroundFilter extends RTTShader { + private elapsed: number; + private filter: PIXI.Filter; + + constructor(renderer: PIXI.Renderer, scale: number) { + const filter = new PIXI.Filter(null, filter_src, { + iTime: 0, + iResolution: [renderer.width / scale, renderer.height / scale], + }); + super(renderer, filter, scale); + this.elapsed = 0; + this.filter = filter; + } + + rescale(scale: number) { + super.rescale(scale); + this.filter.uniforms.iResolution = [ + this.renderer.width / scale, + this.renderer.height / scale, + ]; + } + + update(delta: number) { + this.filter.uniforms.iTime = this.elapsed; + this.elapsed += delta / 60; + } +} diff --git a/src/graphics/filters/frag/InGameSpace.frag b/src/graphics/filters/frag/InGameSpace.frag new file mode 100644 index 0000000..be47c81 --- /dev/null +++ b/src/graphics/filters/frag/InGameSpace.frag @@ -0,0 +1,47 @@ +precision mediump float; + +uniform sampler2D noise_sparse; +uniform sampler2D noise_fine; + +uniform vec2 iResolution; +uniform float scroll_speed; +uniform float warp_boost; +uniform float warp_opacity; +uniform float time; + +const float noise_sparse_scale = 0.0007; +const float noise_fine_scale = 0.003; +const float warp_clouds_scale = 0.0003; +const vec2 scroll_dir = vec2(1,0); +const vec2 blink_scroll = vec2(50.0, 0); +const float PI = 3.1415; + +void main() { + vec2 uv=gl_FragCoord.xy/iResolution.xy; + float scroll = scroll_speed * time; + float sparse = texture2D(noise_sparse, (gl_FragCoord.xy + scroll_dir * scroll)*noise_sparse_scale).r; + sparse = ((sparse * sparse) - 0.2) * 1.2; + float fine = texture2D(noise_fine, (gl_FragCoord.xy + scroll_dir * scroll)*noise_fine_scale).r; + fine = fine - 0.6; + if (fine > 0.) { + fine = fine * 10.0; + } + if (fine > 0.3) { + float fine_blink_fade = texture2D(noise_sparse, (gl_FragCoord.xy + blink_scroll*time)*noise_sparse_scale).r; + fine = fine - ((fine_blink_fade * fine_blink_fade) - 0.2) * 1.2; + } + vec4 clouds = vec4(vec3(0.3, 0.5, 0.7) * sparse, 1.0); + vec4 stars = vec4(fine); + + vec2 warp_scroll = scroll_dir * scroll; + vec2 warp_uv = (gl_FragCoord.xy * sin(uv.y * PI) + warp_scroll)*warp_clouds_scale; + vec2 warp_uv_inv = (gl_FragCoord.xy * sin((abs(uv.y-0.5)) * uv.x * PI) + warp_scroll*0.5)*warp_clouds_scale; + float warp_clouds_sparse = texture2D(noise_sparse, vec2(0.5,1) * warp_uv).r; + float warp_clouds_fine = texture2D(noise_sparse, vec2(2,1) * warp_uv_inv).r; + + vec4 warp = vec4(vec3(0), 1); + warp += vec4(vec3(0.3,0.2,0.9)*warp_clouds_sparse, 0); + warp += vec4(vec3(0.5,0.0,0.5)*(warp_clouds_fine*0.5+warp_clouds_sparse)*abs(uv.y-0.5), 0); + + gl_FragColor = mix(clouds + stars, warp*warp_boost, warp_opacity); +} \ No newline at end of file diff --git a/src/index.ts b/src/graphics/filters/frag/MenuBackground.frag similarity index 62% rename from src/index.ts rename to src/graphics/filters/frag/MenuBackground.frag index fa6dd6a..d80e8ab 100644 --- a/src/index.ts +++ b/src/graphics/filters/frag/MenuBackground.frag @@ -1,26 +1,8 @@ -import { Howl } from "howler"; -import * as PIXI from "pixi.js"; - -//@ts-expect-error It's a music file -import title from "../assets/sounds/music/title.opus"; - -const pixiApp = new PIXI.Application({ - width: window.innerWidth, - height: window.innerHeight, - resolution: window.devicePixelRatio || 1, -}); - -window.addEventListener("resize", function () { - pixiApp.renderer.resize(window.innerWidth, window.innerHeight); -}); - -document.body.appendChild(pixiApp.view); - -const filter_src = ` // Star Nest by Pablo Roman Andrioli // This content is under the MIT License. +precision mediump float; -uniform vec3 iResolution; +uniform vec2 iResolution; uniform float iTime; #define iterations 17 @@ -56,8 +38,8 @@ void main() dir.xz*=rot1; dir.xy*=rot2; vec3 from=vec3(1.,.5,0.5); - from+=vec3(time*2.,time,-2.); - from.xz*=rot1; + from+=vec3(time*2.,time,-2.); + from.xz*=rot1; from.xy*=rot2; //volumetric rendering @@ -84,23 +66,4 @@ void main() v=mix(vec3(length(v)),v,saturation); //color adjust gl_FragColor = vec4(v*.01,1.); -} -`; -const filter = new PIXI.Filter(null, filter_src, { - iTime: 0, - iResolution: [window.innerWidth, window.innerHeight], -}); - -pixiApp.stage.filterArea = pixiApp.renderer.screen; -pixiApp.stage.filters = [filter]; - -let elapsed = 0; -pixiApp.ticker.add((delta) => { - filter.uniforms.iTime = elapsed; - elapsed += delta / 60; -}); - -var sound = new Howl({ - src: [title], - autoplay: true, -}); +} \ No newline at end of file diff --git a/src/graphics/utils/RTTShader.ts b/src/graphics/utils/RTTShader.ts new file mode 100644 index 0000000..ede6d80 --- /dev/null +++ b/src/graphics/utils/RTTShader.ts @@ -0,0 +1,30 @@ +import * as PIXI from "pixi.js"; + +export default class RTTShader { + readonly texture: PIXI.RenderTexture; + readonly container: PIXI.Container; + readonly renderer: PIXI.Renderer; + + constructor(renderer: PIXI.Renderer, filter: PIXI.Filter, scale: number = 2) { + this.renderer = renderer; + this.texture = PIXI.RenderTexture.create({ + width: this.renderer.width / scale, + height: this.renderer.height / scale, + }); + this.container = new PIXI.Container(); + this.container.filterArea = this.texture.frame; + this.container.filters = [filter]; + } + + rescale(scale: number) { + this.texture.resize( + this.renderer.width / scale, + this.renderer.height / scale + ); + this.container.filterArea = this.texture.frame; + } + + render() { + this.renderer.render(this.container, this.texture); + } +} diff --git a/src/index.html b/src/index.html index 5f606e1..42dec79 100644 --- a/src/index.html +++ b/src/index.html @@ -4,11 +4,11 @@ NSS Odyssey - +
- + diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..4772e29 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,26 @@ +import * as React from "react"; +import * as PIXI from "pixi.js"; +import ReactDOM from "react-dom"; +import { Stage, useApp } from "@inlet/react-pixi"; +import MenuBackground from "./game/MenuBackground"; + +PIXI.settings.SCALE_MODE = PIXI.SCALE_MODES.NEAREST; + +const mounted = (app: PIXI.Application) => { + window.addEventListener("resize", () => { + app.queueResize(); + }); + app.queueResize(); +}; + +ReactDOM.render( + + + + +
+

Hello!

+
+
, + document.getElementById("app") +); diff --git a/src/screen.scss b/src/screen.scss index 0f01b43..79ab770 100644 --- a/src/screen.scss +++ b/src/screen.scss @@ -8,17 +8,25 @@ body { height: 100vh; } -#app { +#ui { display: flex; align-items: center; justify-content: center; width: 100vw; height: 100vh; - z-index: 10; + position: fixed; + top: 0; + left: 0; + p { + font-size: 20pt; + color: white; + font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + font-style: italic; + } } #app, -body > canvas { +#ui { position: fixed; top: 0; left: 0; diff --git a/src/ui/App.tsx b/src/ui/App.tsx new file mode 100644 index 0000000..d521fc6 --- /dev/null +++ b/src/ui/App.tsx @@ -0,0 +1,4 @@ +import * as React from "react"; +import ReactDOM from "react-dom"; + +ReactDOM.render(

Hello

, document.getElementById("ui")); diff --git a/src/ui/Menu.tsx b/src/ui/Menu.tsx new file mode 100644 index 0000000..4b7c4cb --- /dev/null +++ b/src/ui/Menu.tsx @@ -0,0 +1 @@ +import * as React from "react"; diff --git a/yarn.lock b/yarn.lock index b742220..c980af1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -877,11 +877,26 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@choojs/findup@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@choojs/findup/-/findup-0.2.1.tgz#ac13c59ae7be6e1da64de0779a0a7f03d75615a3" + integrity sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw== + dependencies: + commander "^2.15.1" + "@iarna/toml@^2.2.0": version "2.2.5" resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== +"@inlet/react-pixi@^5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@inlet/react-pixi/-/react-pixi-5.1.4.tgz#fdccf0abbe0f7f4fda457f938b71a04e499af9da" + integrity sha512-CWd/DYjx6LgWitZMe5APW62g44RMy8xzXHcqFSbCnpVTvKAm4ikdStyWq6a9viJKlro7VrBCkGmaFl901TkPTw== + dependencies: + performance-now "^2.1.0" + react-reconciler "0.25.1" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1253,11 +1268,31 @@ resolved "https://registry.yarnpkg.com/@types/howler/-/howler-2.2.1.tgz#c95314724a8e970b1b29a731861975f39987b9ca" integrity sha512-1MiSldngr+eAO4lDPtjzl4Nf2GmRh8VDHIpNBIkyd25L22JExVlI6w3fjSM7+FNc1e1WZAPNq7/flkw685byfg== +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + "@types/q@^1.5.1": version "1.5.4" resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== +"@types/react-dom@^16.9.8": + version "16.9.8" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" + integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^16.9.49": + version "16.9.49" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.49.tgz#09db021cf8089aba0cdb12a49f8021a69cce4872" + integrity sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + abab@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" @@ -1301,6 +1336,11 @@ alphanum-sort@^1.0.0: resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= +animejs@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/animejs/-/animejs-3.2.0.tgz#2daea7365983249022cc454fa726acdb4a84345d" + integrity sha512-zhtGl5cS0G2f5DfciMO8uwWpnx06nfFnHlXYYXHBazHep1Lyd6kEtBQP+9hpYKE0dBZjIigHp9VpMO95ZfXQJQ== + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1905,7 +1945,7 @@ command-exists@^1.2.6: resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== -commander@^2.11.0, commander@^2.19.0, commander@^2.20.0: +commander@^2.11.0, commander@^2.15.1, commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -2205,6 +2245,11 @@ cssstyle@^1.1.1: dependencies: cssom "0.3.x" +csstype@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" + integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag== + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -2571,6 +2616,11 @@ eventemitter3@^3.1.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== +events@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + events@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" @@ -2828,7 +2878,113 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -graceful-fs@^4.1.11: +glsl-inject-defines@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz#dd1aacc2c17fcb2bd3fc32411c6633d0d7b60fd4" + integrity sha1-3RqswsF/yyvT/DJBHGYz0Ne2D9Q= + dependencies: + glsl-token-inject-block "^1.0.0" + glsl-token-string "^1.0.1" + glsl-tokenizer "^2.0.2" + +glsl-resolve@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/glsl-resolve/-/glsl-resolve-0.0.1.tgz#894bef73910d792c81b5143180035d0a78af76d3" + integrity sha1-iUvvc5ENeSyBtRQxgANdCnivdtM= + dependencies: + resolve "^0.6.1" + xtend "^2.1.2" + +glsl-token-assignments@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz#a5d82ab78499c2e8a6b83cb69495e6e665ce019f" + integrity sha1-pdgqt4SZwuimuDy2lJXm5mXOAZ8= + +glsl-token-defines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz#cb892aa959936231728470d4f74032489697fa9d" + integrity sha1-y4kqqVmTYjFyhHDU90AySJaX+p0= + dependencies: + glsl-tokenizer "^2.0.0" + +glsl-token-depth@^1.1.0, glsl-token-depth@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz#23c5e30ee2bd255884b4a28bc850b8f791e95d84" + integrity sha1-I8XjDuK9JViEtKKLyFC495HpXYQ= + +glsl-token-descope@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz#0fc90ab326186b82f597b2e77dc9e21efcd32076" + integrity sha1-D8kKsyYYa4L1l7LnfcniHvzTIHY= + dependencies: + glsl-token-assignments "^2.0.0" + glsl-token-depth "^1.1.0" + glsl-token-properties "^1.0.0" + glsl-token-scope "^1.1.0" + +glsl-token-inject-block@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz#e1015f5980c1091824adaa2625f1dfde8bd00034" + integrity sha1-4QFfWYDBCRgkraomJfHf3ovQADQ= + +glsl-token-properties@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz#483dc3d839f0d4b5c6171d1591f249be53c28a9e" + integrity sha1-SD3D2Dnw1LXGFx0VkfJJvlPCip4= + +glsl-token-scope@^1.1.0, glsl-token-scope@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz#a1728e78df24444f9cb93fd18ef0f75503a643b1" + integrity sha1-oXKOeN8kRE+cuT/RjvD3VQOmQ7E= + +glsl-token-string@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/glsl-token-string/-/glsl-token-string-1.0.1.tgz#59441d2f857de7c3449c945666021ece358e48ec" + integrity sha1-WUQdL4V958NEnJRWZgIezjWOSOw= + +glsl-token-whitespace-trim@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz#46d1dfe98c75bd7d504c05d7d11b1b3e9cc93b10" + integrity sha1-RtHf6Yx1vX1QTAXX0RsbPpzJOxA= + +glsl-tokenizer@^2.0.0, glsl-tokenizer@^2.0.2: + version "2.1.5" + resolved "https://registry.yarnpkg.com/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz#1c2e78c16589933c274ba278d0a63b370c5fee1a" + integrity sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA== + dependencies: + through2 "^0.6.3" + +glslify-bundle@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glslify-bundle/-/glslify-bundle-5.1.1.tgz#30d2ddf2e6b935bf44d1299321e3b729782c409a" + integrity sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A== + dependencies: + glsl-inject-defines "^1.0.1" + glsl-token-defines "^1.0.0" + glsl-token-depth "^1.1.1" + glsl-token-descope "^1.0.2" + glsl-token-scope "^1.1.1" + glsl-token-string "^1.0.1" + glsl-token-whitespace-trim "^1.0.0" + glsl-tokenizer "^2.0.2" + murmurhash-js "^1.0.0" + shallow-copy "0.0.1" + +glslify-deps@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/glslify-deps/-/glslify-deps-1.3.1.tgz#dfa6962322454a91ecc4de25b5e710415b0c89ad" + integrity sha512-Ogm179MCazwIRyEqs3g3EOY4Y3XIAa0yl8J5RE9rJC6QH1w8weVOp2RZu0mvnYy/2xIas1w166YR2eZdDkWQxg== + dependencies: + "@choojs/findup" "^0.2.0" + events "^1.0.2" + glsl-resolve "0.0.1" + glsl-tokenizer "^2.0.0" + graceful-fs "^4.1.2" + inherits "^2.0.1" + map-limit "0.0.1" + resolve "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -3318,6 +3474,11 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -3535,7 +3696,7 @@ log-symbols@^2.2.0: dependencies: chalk "^2.0.1" -loose-envify@^1.0.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -3554,6 +3715,13 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= +map-limit@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/map-limit/-/map-limit-0.0.1.tgz#eb7961031c0f0e8d001bf2d56fab685d58822f38" + integrity sha1-63lhAxwPDo0AG/LVb6toXViCLzg= + dependencies: + once "~1.3.0" + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -3698,6 +3866,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +murmurhash-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" + integrity sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E= + nan@^2.12.1: version "2.14.1" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" @@ -3893,6 +4066,13 @@ once@^1.3.0: dependencies: wrappy "1" +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA= + dependencies: + wrappy "1" + onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -4553,6 +4733,15 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= +prop-types@^15.6.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + psl@^1.1.28: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" @@ -4644,6 +4833,50 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +react-dom@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" + integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.19.1" + +react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-reconciler@0.25.1: + version "0.25.1" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.25.1.tgz#f9814d59d115e1210762287ce987801529363aaa" + integrity sha512-R5UwsIvRcSs3w8n9k3tBoTtUHdVhu9u84EG7E5M0Jk9F5i6DA1pQzPfUZd6opYWGy56MJOtV3VADzy6DRwYDjw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.19.1" + +react@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" + integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +"readable-stream@>=1.0.33-1 <1.1.0-0": + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.3, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -4810,7 +5043,12 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.5, resolve@^1.3.2, resolve@^1.4.0: +resolve@^0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46" + integrity sha1-3ZV5gufnNt699TtYpN2RdUV13UY= + +resolve@^1.0.0, resolve@^1.1.5, resolve@^1.3.2, resolve@^1.4.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== @@ -4911,6 +5149,14 @@ saxes@^3.1.9: dependencies: xmlchars "^2.1.1" +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" @@ -4983,7 +5229,7 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-copy@~0.0.1: +shallow-copy@0.0.1, shallow-copy@~0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" integrity sha1-QV9CcC1z2BAzApLMXuhurhoRoXA= @@ -5195,6 +5441,11 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -5293,6 +5544,14 @@ terser@^4.8.0: source-map "~0.6.1" source-map-support "~0.5.12" +through2@^0.6.3: + version "0.6.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg= + dependencies: + readable-stream ">=1.0.33-1 <1.1.0-0" + xtend ">=4.0.0 <4.1.0-0" + through2@^2.0.0, through2@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -5681,7 +5940,12 @@ xmlchars@^2.1.1: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.0, xtend@~4.0.1: +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xtend@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" + integrity sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=