├── scss ├── leader.scss ├── start.scss ├── main.scss ├── particles.scss ├── game.scss └── logo-animation.scss ├── Procfile ├── views ├── layout.ejs └── game.ejs ├── renovate.json ├── public ├── js │ ├── sounds │ │ └── sound.mp3 │ ├── voice.js │ ├── variables.js │ ├── lib │ │ ├── threelib │ │ │ ├── stats.min.js │ │ │ ├── DragControls.js │ │ │ └── TrackballControls.js │ │ └── tracking-min.js │ ├── particles.json │ ├── game.js │ └── three-animations.js ├── fonts │ ├── roboto │ │ ├── Roboto-Bold.woff │ │ ├── Roboto-Thin.woff │ │ ├── Roboto-Bold.woff2 │ │ ├── Roboto-Light.woff │ │ ├── Roboto-Light.woff2 │ │ ├── Roboto-Medium.woff │ │ ├── Roboto-Thin.woff2 │ │ ├── Roboto-Medium.woff2 │ │ ├── Roboto-Regular.woff │ │ └── Roboto-Regular.woff2 │ └── Lobster-Regular │ │ └── Lobster-Regular.ttf ├── font-awesome-4.7.0 │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 │ ├── less │ │ ├── screen-reader.less │ │ ├── fixed-width.less │ │ ├── larger.less │ │ ├── list.less │ │ ├── core.less │ │ ├── stacked.less │ │ ├── font-awesome.less │ │ ├── bordered-pulled.less │ │ ├── rotated-flipped.less │ │ ├── path.less │ │ ├── animated.less │ │ ├── mixins.less │ │ └── variables.less │ ├── scss │ │ ├── _fixed-width.scss │ │ ├── _screen-reader.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _core.scss │ │ ├── font-awesome.scss │ │ ├── _stacked.scss │ │ ├── _bordered-pulled.scss │ │ ├── _rotated-flipped.scss │ │ ├── _path.scss │ │ ├── _animated.scss │ │ ├── _mixins.scss │ │ └── _variables.scss │ └── HELP-US-OUT.txt ├── logo.svg └── css │ └── main.css ├── app.json ├── routes └── routes.js ├── models └── Player.js ├── .all-contributorsrc ├── LICENSE ├── .gitignore ├── package.json ├── app.js ├── app └── GameController.js └── README.md /scss/leader.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scss/start.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node app.js 2 | -------------------------------------------------------------------------------- /views/layout.ejs: -------------------------------------------------------------------------------- 1 | <%- body %> 2 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /public/js/sounds/sound.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/js/sounds/sound.mp3 -------------------------------------------------------------------------------- /scss/main.scss: -------------------------------------------------------------------------------- 1 | @import 'game'; 2 | @import 'start'; 3 | @import 'logo-animation'; 4 | @import 'particles'; 5 | -------------------------------------------------------------------------------- /public/fonts/roboto/Roboto-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/fonts/roboto/Roboto-Bold.woff -------------------------------------------------------------------------------- /public/fonts/roboto/Roboto-Thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/fonts/roboto/Roboto-Thin.woff -------------------------------------------------------------------------------- /public/fonts/roboto/Roboto-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/fonts/roboto/Roboto-Bold.woff2 -------------------------------------------------------------------------------- /public/fonts/roboto/Roboto-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/fonts/roboto/Roboto-Light.woff -------------------------------------------------------------------------------- /public/fonts/roboto/Roboto-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/fonts/roboto/Roboto-Light.woff2 -------------------------------------------------------------------------------- /public/fonts/roboto/Roboto-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/fonts/roboto/Roboto-Medium.woff -------------------------------------------------------------------------------- /public/fonts/roboto/Roboto-Thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/fonts/roboto/Roboto-Thin.woff2 -------------------------------------------------------------------------------- /public/fonts/roboto/Roboto-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/fonts/roboto/Roboto-Medium.woff2 -------------------------------------------------------------------------------- /public/fonts/roboto/Roboto-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/fonts/roboto/Roboto-Regular.woff -------------------------------------------------------------------------------- /public/fonts/roboto/Roboto-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/fonts/roboto/Roboto-Regular.woff2 -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/font-awesome-4.7.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /public/fonts/Lobster-Regular/Lobster-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/fonts/Lobster-Regular/Lobster-Regular.ttf -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/font-awesome-4.7.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/font-awesome-4.7.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tortuvshin/intelligo-game/HEAD/public/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "INTELLIGO Game", 3 | "description": "Augmented reality and Virtual reality game", 4 | "repository": "https://github.com/tortuvshin/intelligo-game.git", 5 | "keywords": ["node", "express", "game"] 6 | } 7 | -------------------------------------------------------------------------------- /routes/routes.js: -------------------------------------------------------------------------------- 1 | const game = require('../app/GameController'); 2 | 3 | module.exports = function(app){ 4 | 5 | app.get('/', game.playGame); 6 | 7 | app.post('/', game.createPlayer); 8 | 9 | app.get('/seed', game.demoData); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /scss/particles.scss: -------------------------------------------------------------------------------- 1 | 2 | .particles-js-canvas-el { 3 | position: absolute; 4 | top: 0; 5 | } 6 | 7 | 8 | #particles-start .particles-js-canvas-el { 9 | position: absolute; 10 | z-index: -1; 11 | } 12 | 13 | #particles-end .particles-js-canvas-el { 14 | position: absolute; 15 | z-index: -1; 16 | } 17 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /models/Player.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'), 2 | Schema = mongoose.Schema; 3 | 4 | const playerSchema = new Schema({ 5 | name: String, 6 | avatar: String, 7 | score: Number, 8 | created: { 9 | type: Date, 10 | default: Date.now 11 | } 12 | }); 13 | 14 | const playerModel = mongoose.model('Player', playerSchema); 15 | 16 | module.exports = playerModel; 17 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /public/js/voice.js: -------------------------------------------------------------------------------- 1 | // USING ANNYANG TO START THE GAME 2 | if (annyang) { 3 | // Let's define our first command. First the text we expect, and then the function it should call 4 | var commands = { 5 | 'start game': function() { 6 | gameHasStarted = true; 7 | setTimeout(updateSpeed, 5000) 8 | interval_id = setInterval(addRow, 6000); 9 | document.getElementsByClassName("start_game_menu")[0].style.display = "none" 10 | document.getElementsByClassName("game_screen")[0].style.display = "block" 11 | document.getElementsByClassName("score-container")[0].style.display = "block" 12 | var item = document.getElementById("fourth-text") 13 | item.className = "fourth-text" 14 | } 15 | }; 16 | 17 | // Add our commands to annyang 18 | annyang.addCommands(commands); 19 | 20 | // Start listening. You can call this here, or attach this call to an event, button, etc. 21 | annyang.start(); 22 | } 23 | -------------------------------------------------------------------------------- /.all-contributorsrc: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | "README.md" 4 | ], 5 | "imageSize": 100, 6 | "commit": false, 7 | "contributors": [ 8 | { 9 | "login": "tortuvshin", 10 | "name": "Turtuvshin Byambaa", 11 | "avatar_url": "https://avatars3.githubusercontent.com/u/9257227?v=4", 12 | "profile": "https://github.com/tortuvshin", 13 | "contributions": [ 14 | "infra", 15 | "test", 16 | "code" 17 | ] 18 | }, 19 | { 20 | "login": "doljko", 21 | "name": "Enkhbayar Doljinsuren", 22 | "avatar_url": "https://avatars2.githubusercontent.com/u/12738721?v=4", 23 | "profile": "https://www.intelligo.systems/", 24 | "contributions": [ 25 | "infra", 26 | "test", 27 | "code" 28 | ] 29 | } 30 | ], 31 | "contributorsPerLine": 7, 32 | "projectName": "intelligo-game", 33 | "projectOwner": "intelligo-systems", 34 | "repoType": "github", 35 | "repoHost": "https://github.com" 36 | } 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Techstar 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # next.js build output 61 | .next 62 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "intelligo-game", 3 | "version": "0.0.1", 4 | "description": "Game", 5 | "author": "Tortuvshin Byambaa", 6 | "copyright": "Copyright 2019 Opengineer", 7 | "license": "MIT", 8 | "main": "app.js", 9 | "private": true, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/opengineer/intelligo-game.git" 13 | }, 14 | "scripts": { 15 | "start": "node app.js", 16 | "build-css": "node-sass --include-path scss scss/main.scss public/css/main.css", 17 | "watch-css": "nodemon -e scss -x \"npm run build-css\"" 18 | }, 19 | "dependencies": { 20 | "body-parser": "1.18.3", 21 | "config": "1.30.0", 22 | "cookie-parser": "1.4.3", 23 | "ejs": "2.6.1", 24 | "express": "4.16.3", 25 | "express-ejs-layouts": "2.4.0", 26 | "express-session": "1.15.6", 27 | "express-validator": "2.21.0", 28 | "mongoose": "5.6.8", 29 | "morgan": "1.9.1", 30 | "npm": "6.10.2", 31 | "path": "0.12.7", 32 | "request": "2.87.0" 33 | }, 34 | "cacheDirectories": [ 35 | "node_modules" 36 | ], 37 | "devDependencies": { 38 | "node-sass": "4.12.0", 39 | "nodemon": "1.19.1" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const express = require( 'express'), 4 | expressLayouts = require('express-ejs-layouts'), 5 | path = require('path'), 6 | morgan = require('morgan'), 7 | mongoose = require('mongoose'), 8 | bodyParser = require('body-parser'); 9 | 10 | const app = express(); 11 | 12 | app.set('port', process.env.PORT || 5000); 13 | app.use(morgan('dev')); 14 | app.use(bodyParser.json()); 15 | app.use(bodyParser.urlencoded({ extended: true })); 16 | app.use(express.static(path.join(__dirname, "public"))); 17 | 18 | app.set("views", path.join(__dirname, "views")); 19 | app.set('view engine', 'ejs'); 20 | app.use(expressLayouts); 21 | 22 | mongoose.Promise = global.Promise; 23 | mongoose.connect('mongodb://127.0.0.1:27017/intelligo', { useNewUrlParser: true }); 24 | 25 | const db = mongoose.connection; 26 | db.on('error', console.error.bind(console, 'connection error:')); 27 | db.once('open', function() { 28 | console.log("Database connected"); 29 | }); 30 | 31 | require('./routes/routes.js')(app); 32 | 33 | app.listen(app.get('port'), () => { 34 | console.log('Intelligo game is listening on port', app.get('port')); 35 | }); 36 | -------------------------------------------------------------------------------- /public/js/variables.js: -------------------------------------------------------------------------------- 1 | var c, cc; 2 | 3 | var score = 0; 4 | var brickspeed = 0.03; 5 | // paddle 6 | var paddle_x_position = 0; 7 | var paddle_height = 30; 8 | var paddle_width = 300; 9 | var paddle_y_position = 430 10 | 11 | //ball 12 | var ball_x_position = 470; 13 | var ball_y_position = 200; 14 | var ball_dimension = 15; 15 | var x_velocity = 1; 16 | var y_velocity = 1; 17 | 18 | //brick parameters 19 | var brickRowCount = 3; 20 | var brickColumnCount = 6; 21 | var brickWidth = 65; 22 | var brickHeight = 20; 23 | var brickPaddingX = 20; 24 | var brickPaddingY = 10; 25 | var brickOffsetTop = 20; 26 | var brickOffsetLeft = 40; 27 | 28 | var gameHasStarted = false; 29 | 30 | //create brick array 31 | var bricks = []; 32 | for(c=0; c { 29 | for (player of players) { 30 | const newPlayer = new Player(player); 31 | newPlayer.save(); 32 | } 33 | }); 34 | 35 | res.send('Players demo data seeded!'); 36 | }, 37 | 38 | createPlayer(req, res){ 39 | const player = new Player({ 40 | name: req.body.name, 41 | avatar: req.body.avatar, 42 | score: req.body.score, 43 | }); 44 | player.save((err) => { 45 | if (err) { 46 | res.send('Error: '+err); 47 | } 48 | res.send('Create new player...'); 49 | }); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /public/js/lib/threelib/stats.min.js: -------------------------------------------------------------------------------- 1 | // stats.js - http://github.com/mrdoob/stats.js 2 | var Stats=function(){function h(a){c.appendChild(a.dom);return a}function k(a){for(var d=0;de+1E3&&(r.update(1E3*a/(c-e),100),e=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){g=this.end()},domElement:c,setMode:k}}; 4 | Stats.Panel=function(h,k,l){var c=Infinity,g=0,e=Math.round,a=e(window.devicePixelRatio||1),r=80*a,f=48*a,t=3*a,u=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement("canvas");q.width=r;q.height=f;q.style.cssText="width:80px;height:48px";var b=q.getContext("2d");b.font="bold "+9*a+"px Helvetica,Arial,sans-serif";b.textBaseline="top";b.fillStyle=l;b.fillRect(0,0,r,f);b.fillStyle=k;b.fillText(h,t,u);b.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(f, 5 | v){c=Math.min(c,f);g=Math.max(g,f);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=k;b.fillText(e(f)+" "+h+" ("+e(c)+"-"+e(g)+")",t,u);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,e((1-f/v)*p))}}};"object"===typeof module&&(module.exports=Stats); 6 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /public/js/particles.json: -------------------------------------------------------------------------------- 1 | { 2 | "particles": { 3 | "number": { 4 | "value": 160, 5 | "density": { 6 | "enable": true, 7 | "value_area": 800 8 | } 9 | }, 10 | "color": { 11 | "value": "#ffffff" 12 | }, 13 | "shape": { 14 | "type": "circle", 15 | "stroke": { 16 | "width": 0, 17 | "color": "#000000" 18 | }, 19 | "polygon": { 20 | "nb_sides": 5 21 | }, 22 | "image": { 23 | "src": "img/github.svg", 24 | "width": 100, 25 | "height": 100 26 | } 27 | }, 28 | "opacity": { 29 | "value": 1, 30 | "random": true, 31 | "anim": { 32 | "enable": true, 33 | "speed": 1, 34 | "opacity_min": 0, 35 | "sync": false 36 | } 37 | }, 38 | "size": { 39 | "value": 3, 40 | "random": true, 41 | "anim": { 42 | "enable": false, 43 | "speed": 4, 44 | "size_min": 0.3, 45 | "sync": false 46 | } 47 | }, 48 | "line_linked": { 49 | "enable": false, 50 | "distance": 150, 51 | "color": "#ffffff", 52 | "opacity": 0.4, 53 | "width": 1 54 | }, 55 | "move": { 56 | "enable": true, 57 | "speed": 1, 58 | "direction": "none", 59 | "random": true, 60 | "straight": false, 61 | "out_mode": "out", 62 | "bounce": false, 63 | "attract": { 64 | "enable": false, 65 | "rotateX": 600, 66 | "rotateY": 600 67 | } 68 | } 69 | }, 70 | "interactivity": { 71 | "detect_on": "canvas", 72 | "events": { 73 | "onhover": { 74 | "enable": true, 75 | "mode": "bubble" 76 | }, 77 | "onclick": { 78 | "enable": true, 79 | "mode": "repulse" 80 | }, 81 | "resize": true 82 | }, 83 | "modes": { 84 | "grab": { 85 | "distance": 400, 86 | "line_linked": { 87 | "opacity": 1 88 | } 89 | }, 90 | "bubble": { 91 | "distance": 250, 92 | "size": 0, 93 | "duration": 2, 94 | "opacity": 0, 95 | "speed": 3 96 | }, 97 | "repulse": { 98 | "distance": 400, 99 | "duration": 0.4 100 | }, 101 | "push": { 102 | "particles_nb": 4 103 | }, 104 | "remove": { 105 | "particles_nb": 2 106 | } 107 | } 108 | }, 109 | "retina_detect": true 110 | } 111 | -------------------------------------------------------------------------------- /views/game.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Intelligo 6 | 7 | 8 | 9 | 10 | 11 | 12 | 29 | 30 |
31 |
3
32 |
2
33 |
1
34 |
READY?
35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |

Score: 0

43 | 44 |
45 | 46 |
47 |

Intelligo

48 | 49 |
50 | 51 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /public/js/lib/threelib/DragControls.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @author zz85 / https://github.com/zz85 3 | * @author mrdoob / http://mrdoob.com 4 | * Running this will allow you to drag three.js objects around the screen. 5 | */ 6 | 7 | THREE.DragControls = function ( _objects, _camera, _domElement ) { 8 | 9 | if ( _objects instanceof THREE.Camera ) { 10 | 11 | console.warn( 'THREE.DragControls: Constructor now expects ( objects, camera, domElement )' ); 12 | var temp = _objects; _objects = _camera; _camera = temp; 13 | 14 | } 15 | 16 | var _plane = new THREE.Plane(); 17 | var _raycaster = new THREE.Raycaster(); 18 | 19 | var _mouse = new THREE.Vector2(); 20 | var _offset = new THREE.Vector3(); 21 | var _intersection = new THREE.Vector3(); 22 | 23 | var _selected = null, _hovered = null; 24 | 25 | // 26 | 27 | var scope = this; 28 | 29 | function activate() { 30 | 31 | _domElement.addEventListener( 'mousemove', onDocumentMouseMove, false ); 32 | _domElement.addEventListener( 'mousedown', onDocumentMouseDown, false ); 33 | _domElement.addEventListener( 'mouseup', onDocumentMouseUp, false ); 34 | 35 | } 36 | 37 | function deactivate() { 38 | 39 | _domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false ); 40 | _domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false ); 41 | _domElement.removeEventListener( 'mouseup', onDocumentMouseUp, false ); 42 | 43 | } 44 | 45 | function dispose() { 46 | 47 | deactivate(); 48 | 49 | } 50 | 51 | function onDocumentMouseMove( event ) { 52 | 53 | event.preventDefault(); 54 | 55 | var rect = _domElement.getBoundingClientRect(); 56 | 57 | _mouse.x = ( (event.clientX - rect.left) / rect.width ) * 2 - 1; 58 | _mouse.y = - ( (event.clientY - rect.top) / rect.height ) * 2 + 1; 59 | 60 | _raycaster.setFromCamera( _mouse, _camera ); 61 | 62 | if ( _selected && scope.enabled ) { 63 | 64 | if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) { 65 | 66 | _selected.position.copy( _intersection.sub( _offset ) ); 67 | 68 | } 69 | 70 | scope.dispatchEvent( { type: 'drag', object: _selected } ); 71 | 72 | return; 73 | 74 | } 75 | 76 | _raycaster.setFromCamera( _mouse, _camera ); 77 | 78 | var intersects = _raycaster.intersectObjects( _objects ); 79 | 80 | if ( intersects.length > 0 ) { 81 | 82 | var object = intersects[ 0 ].object; 83 | 84 | _plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), object.position ); 85 | 86 | if ( _hovered !== object ) { 87 | 88 | scope.dispatchEvent( { type: 'hoveron', object: object } ); 89 | 90 | _domElement.style.cursor = 'pointer'; 91 | _hovered = object; 92 | 93 | } 94 | 95 | } else { 96 | 97 | if ( _hovered !== null ) { 98 | 99 | scope.dispatchEvent( { type: 'hoveroff', object: _hovered } ); 100 | 101 | _domElement.style.cursor = 'auto'; 102 | _hovered = null; 103 | 104 | } 105 | 106 | } 107 | 108 | } 109 | 110 | function onDocumentMouseDown( event ) { 111 | 112 | event.preventDefault(); 113 | 114 | _raycaster.setFromCamera( _mouse, _camera ); 115 | 116 | var intersects = _raycaster.intersectObjects( _objects ); 117 | 118 | if ( intersects.length > 0 ) { 119 | 120 | _selected = intersects[ 0 ].object; 121 | 122 | if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) { 123 | 124 | _offset.copy( _intersection ).sub( _selected.position ); 125 | 126 | } 127 | 128 | _domElement.style.cursor = 'move'; 129 | 130 | scope.dispatchEvent( { type: 'dragstart', object: _selected } ); 131 | 132 | } 133 | 134 | 135 | } 136 | 137 | function onDocumentMouseUp( event ) { 138 | 139 | event.preventDefault(); 140 | 141 | if ( _selected ) { 142 | 143 | scope.dispatchEvent( { type: 'dragend', object: _selected } ); 144 | 145 | _selected = null; 146 | 147 | } 148 | 149 | _domElement.style.cursor = 'auto'; 150 | 151 | } 152 | 153 | activate(); 154 | 155 | // API 156 | 157 | this.enabled = true; 158 | 159 | this.activate = activate; 160 | this.deactivate = deactivate; 161 | this.dispose = dispose; 162 | 163 | // Backward compatibility 164 | 165 | this.setObjects = function () { 166 | 167 | console.error( 'THREE.DragControls: setObjects() has been removed.' ); 168 | 169 | }; 170 | 171 | this.on = function ( type, listener ) { 172 | 173 | console.warn( 'THREE.DragControls: on() has been deprecated. Use addEventListener() instead.' ); 174 | scope.addEventListener( type, listener ); 175 | 176 | }; 177 | 178 | this.off = function ( type, listener ) { 179 | 180 | console.warn( 'THREE.DragControls: off() has been deprecated. Use removeEventListener() instead.' ); 181 | scope.removeEventListener( type, listener ); 182 | 183 | }; 184 | 185 | this.notify = function ( type ) { 186 | 187 | console.error( 'THREE.DragControls: notify() has been deprecated. Use dispatchEvent() instead.' ); 188 | scope.dispatchEvent( { type: type } ); 189 | 190 | }; 191 | 192 | }; 193 | 194 | THREE.DragControls.prototype = Object.create( THREE.EventDispatcher.prototype ); 195 | THREE.DragControls.prototype.constructor = THREE.DragControls; 196 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Intelligo Game - Art & Technology Tohoku 2018 contest 2 | [![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors) 3 | [![StackShare](https://img.shields.io/badge/tech-stack-0690fa.svg?style=flat)](https://stackshare.io/tortuvshin/intelligo-game) 4 | 5 | Augmented reality game development repository. Special International Prize for the Art & Technology Tohoku 2018 contest. 6 | 7 | | [Requirements][] | [Development][] | [Deploy][] | [Built with][] | [Contributors][] | [License][] | 8 | |---|---|---|---|---|---| 9 | 10 | ## Requirements 11 | 12 | - [MongoDB](https://www.mongodb.com/download-center) 13 | - [Node.js 8.0+](http://nodejs.org) 14 | - [Git](https://git-scm.com/download/win) 15 | 16 | ## Development 17 | 18 | Clone repository `git clone https://github.com/tortuvshin/intelligo-game.git` 19 | 20 | Install dependencies `npm install` 21 | 22 | Start up your game by running node `node app.js` 23 | 24 | Web browser [this link](http://localhost:5000) to test the game. 25 | 26 | Compile the sass `npm run build-css` 27 | 28 | Watch the sass `npm run watch-css` 29 | 30 | ## Deploy 31 | 32 | [![Deploy to Heroku](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy) 33 | 34 | ### Deploy to Heroku 35 | 36 | 37 | 38 | - Download and install [Heroku Toolbelt](https://toolbelt.heroku.com/) 39 | - In terminal, run `heroku login` and enter your Heroku credentials 40 | - From *your app* directory run `heroku create` 41 | - Run `heroku addons:create mongolab`. This will set up the mLab add-on and configure the `DB_URI` environment variable in your Heroku app for you. 42 | - Lastly, do `git push heroku master`. Done! 43 | 44 | **Note:** To install Heroku add-ons your account must be verified. 45 | 46 | --- 47 | 48 | 49 | 50 | - Open [mlab.com](https://mlab.com) website 51 | - Click the yellow **Sign up** button 52 | - Fill in your user information then hit **Create account** 53 | - From the dashboard, click on **:zap:Create new** button 54 | - Select **any** cloud provider (I usually go with AWS) 55 | - Under *Plan* click on **Single-node (development)** tab and select **Sandbox** (it's free) 56 | - *Leave MongoDB version as is - `2.4.x`* 57 | - Enter *Database name** for your web app 58 | - Then click on **:zap:Create new MongoDB deployment** button 59 | - Now, to access your database you need to create a DB user 60 | - Click to the recently created database 61 | - You should see the following message: 62 | - *A database user is required to connect to this database.* **Click here** *to create a new one.* 63 | - Click the link and fill in **DB Username** and **DB Password** fields 64 | - Finally, in `.env` instead of `mongodb://localhost:27017/test`, use the following URI with your credentials: 65 | - `db: 'mongodb://USERNAME:PASSWORD@ds027479.mongolab.com:27479/DATABASE_NAME'` 66 | 67 | **Note:** As an alternative to mLab, there is also [Compose](https://www.compose.io/). 68 | 69 | ## Built with 70 | 71 | * [Node.js](https://nodejs.org/en/download/) 72 | * [Express.js](https://expressjs.com/) 73 | * [MongoDB](https://www.mongodb.com/download-center) 74 | * [Tracking.js](https://trackingjs.com/) 75 | * [Three.js](https://threejs.org/) 76 | 77 | ## Contributors 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
Turtuvshin Byambaa
Turtuvshin Byambaa

🚇 ⚠️ 💻
Enkhbayar Doljinsuren
Enkhbayar Doljinsuren

🚇 ⚠️ 💻
87 | 88 | 89 | You may contribute in several ways like creating new features, fixing bugs, improving documentation and examples 90 | or translating any document here to your language. [Find more information in CONTRIBUTING.md](CONTRIBUTING.md). 91 | 92 | ## License 93 | 94 | Intelligo game is open-sourced software licensed under the [MIT](LICENSE). 95 | 96 | **[⬆ back to top](#intelligo-game)** 97 | 98 | [Requirements]:#requirements 99 | [Development]:#development 100 | [Deploy]:#deploy 101 | [Built with]:#built-with 102 | [Authors]:#authors 103 | [Contributors]:#contributors 104 | [License]:#license 105 | -------------------------------------------------------------------------------- /public/js/game.js: -------------------------------------------------------------------------------- 1 | // gamestart btn animation 2 | document.getElementById('start_game_btn').addEventListener('mouseover', function(){ 3 | // this.innerHTML = ''; 4 | this.textContent = 'GO'; 5 | this.classList.remove("animated"); 6 | this.classList.remove("fadeInUp"); 7 | }) 8 | 9 | document.getElementById('start_game_btn').addEventListener('mouseout', function(){ 10 | this.innerHTML = 'Start Game'; 11 | }) 12 | 13 | document.getElementById('try_again_btn').addEventListener('click', function(){ 14 | location.reload(); 15 | }) 16 | 17 | // Get access to the camera! 18 | if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { 19 | // Not adding `{ audio: true }` since we only want video now 20 | navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) { 21 | video.src = window.URL.createObjectURL(stream); 22 | video.play(); 23 | }); 24 | } 25 | 26 | var colors = new tracking.ColorTracker(["magenta"]); 27 | colors.setMinDimension(5); 28 | colors.setMinGroupSize(10) 29 | colors.on('track', function(event) { 30 | if (event.data.length === 0) { 31 | // No colors were detected in this frame. 32 | } else { 33 | var maxRect; 34 | var maxRectArea = 0; 35 | event.data.forEach(function(rect) { 36 | paddle_x_position = rect.x*ratio; //Multiply by the scaling factor used for the screen size 37 | paddle_y_position = rect.y*ratio 38 | 39 | //determine where the top of the detected object is 40 | if (rect.width * rect.height > maxRectArea){ 41 | maxRectArea = rect.width * rect.height; 42 | maxRect = rect; 43 | } 44 | }); 45 | } 46 | }); 47 | 48 | //WHEN THE WINDOW LOADS 49 | window.onload = function() { 50 | tracking.track('#my_velocityvideo', colors, {camera: true}); 51 | setInterval(update, updateRate); // RUN THE RENDER FUNCTION EVERY 50ms 52 | } 53 | 54 | //THE UPDATE SCREEN FUNCTION 55 | var update = () => { 56 | if(gameHasStarted){ 57 | ball_x_position+=x_velocity; 58 | ball_y_position+=y_velocity 59 | } 60 | if(ball_y_position<0 && y_velocity < 0) { 61 | y_velocity=-y_velocity; 62 | } 63 | if(ball_x_position < 0 && x_velocity < 0){ 64 | x_velocity = -x_velocity; 65 | } 66 | //bottom of the screen 67 | if(ball_y_position>canvas.height && y_velocity > 0) { 68 | if(gameHasStarted){ 69 | gameOver(); 70 | } 71 | } 72 | if(ball_x_position > canvas.width && x_velocity > 0){ 73 | x_velocity = -x_velocity; 74 | } 75 | 76 | if(ball_y_position > paddle_y_position - 0 && (ball_y_position - paddle_y_position) < 50 && ball_x_position > paddle_x_position && ball_x_position < paddle_x_position + paddle_width && y_velocity > 0){ 77 | y_velocity=-y_velocity; 78 | } 79 | 80 | renderImage(); 81 | colDetection(); 82 | 83 | 84 | //DEBUGGING: 85 | //context.fillStyle='red'; 86 | //context.fillRect(paddle_x_position, paddle_y_position, paddle_width, paddle_height); 87 | } 88 | 89 | // RENDERS THE IMAGE 90 | var renderImage = () => { 91 | context.drawImage(video, 0, 0, 920, 760); 92 | context.restore(); 93 | } 94 | 95 | function colDetection() { 96 | for(let i = 0 ; i < brickArray.length; i++ ){ 97 | var brick = brickArray[i] 98 | if(brick.status === 1){ 99 | if(gameHasStarted){ 100 | brickArray[i].position.y -= brickspeed; 101 | } 102 | if(brick.row === 3 ) { 103 | var brickX = -brick.position.x*1.65+450; 104 | }else if (brick.row === 2 ){ 105 | var brickX = -brick.position.x*1.6+440; 106 | }else{ 107 | var brickX = -brick.position.x*1.6+450; 108 | } 109 | let brickY = -brick.position.y*1.5+360 110 | if(ball_x_position > brickX && ball_x_position < brickX + brickWidth && ball_y_position > brickY && ball_y_position < brickY+brickHeight) { 111 | y_velocity = -y_velocity; 112 | brickArray[i].status = 0; 113 | removeEntity(brick) 114 | 115 | parts.push(new ExplodeAnimation(brick.position.x, brick.position.y)); 116 | if(parts.length===30){ 117 | parts.splice(0,1) 118 | } 119 | if(brick.isPowerup === 1){ 120 | brickArray.forEach(function(element){ 121 | removeEntity(element) 122 | }) 123 | brickArray = []; 124 | score = score + 25; 125 | updateScore(score); 126 | }else{ 127 | updateScore(++score); 128 | } 129 | brickArray.splice(i, 1); 130 | // console.log(parts) 131 | 132 | } 133 | }} 134 | } 135 | 136 | function removeEntity(object) { 137 | var selectedObject = scene.getObjectByName(object.name); 138 | scene.remove( selectedObject ); 139 | } 140 | 141 | function updateScore (newScore){ 142 | document.getElementById("score").textContent = "Your score: " + newScore; 143 | } 144 | 145 | function updateSpeed () { 146 | x_velocity *= 4; 147 | y_velocity *= 4; 148 | brickspeed = 0.07; 149 | } 150 | 151 | function gameOver(){ 152 | clearInterval(interval_id); 153 | gameHasStarted = false; 154 | 155 | document.getElementById("score").style.visibility = "hidden"; 156 | document.getElementsByClassName("end_game_menu")[0].style.display = "flex"; 157 | document.getElementsByClassName("score-container")[0].style.display = "none" 158 | document.getElementById('result_score').textContent = score; 159 | } 160 | -------------------------------------------------------------------------------- /scss/game.scss: -------------------------------------------------------------------------------- 1 | @mixin font($font-family, $font-file) { 2 | @font-face { 3 | font-family: $font-family; 4 | src: url($font-file+'.eot'); 5 | src: url($font-file+'.eot?#iefix') format('embedded-opentype'), 6 | url($font-file+'.woff') format('woff'), 7 | url($font-file+'.ttf') format('truetype'), 8 | url($font-file+'.svg#aller') format('svg'); 9 | font-weight: normal; 10 | font-style: normal; 11 | } 12 | } 13 | 14 | @include font('Lobster-Regular', '/fonts/Lobster-Regular/Lobster-Regular'); 15 | 16 | *{ 17 | padding: 0; 18 | margin: 0; 19 | } 20 | 21 | html, body{ 22 | font-family: Lobster-Regular, arial, sans-serif; 23 | height: 100%; 24 | width: 100%; 25 | overflow: hidden; 26 | } 27 | 28 | #canvas{ 29 | width: 100%; 30 | height: 100%; 31 | transform: rotateY(180deg); 32 | position: absolute; 33 | } 34 | 35 | #my_velocityvideo { /* hard coding so that it hides behind the canvas*/ 36 | position: absolute; 37 | top:50px; 38 | left:500px; 39 | z-index: -1; 40 | } 41 | 42 | div { 43 | position: absolute; 44 | left:0px; 45 | } 46 | 47 | .start_game_menu{ 48 | position: absolute; 49 | width: 100%; 50 | height: 100%; 51 | background-color: transparent; 52 | display: flex; 53 | flex-direction: column; 54 | justify-content: center; 55 | align-items: center; 56 | z-index: 1; 57 | 58 | h1 { 59 | font-size: 50px; 60 | padding: 10px; 61 | color: #FAFAFA; 62 | } 63 | } 64 | 65 | p{ 66 | font-size: 20px; 67 | } 68 | 69 | #start_game_btn{ 70 | font-family: Lobster-Regular, arial, sans-serif; 71 | margin-top: 10px; 72 | height: 70px; 73 | width: 200px; 74 | border-radius: 5px; 75 | font-size: 25px; 76 | border: none; 77 | z-index: 5; 78 | color: #128053; 79 | background-color: #49ffdc; 80 | 81 | &:hover{ 82 | cursor: pointer; 83 | } 84 | 85 | } 86 | .end_game_menu{ 87 | position: absolute; 88 | width: 100%; 89 | height: 100%; 90 | padding-top: 10px; 91 | background-color: transparent; 92 | display: flex; 93 | flex-direction: column; 94 | justify-content: center; 95 | align-items: center; 96 | z-index: 100; 97 | 98 | h1 { 99 | padding: 10px; 100 | font-size: 50px; 101 | color: #14e393; 102 | } 103 | 104 | h2 { 105 | color: #fafafa; 106 | padding: 10px; 107 | font-size: 30px; 108 | } 109 | 110 | ol { 111 | color: #fafafa; 112 | 113 | li p { 114 | color: #fafafa; 115 | float: left; 116 | margin-left: 5px; 117 | } 118 | } 119 | } 120 | 121 | .end_game_menu p { 122 | color: #afb2bc; 123 | } 124 | 125 | #particles-start .particles-js-canvas-el { 126 | position: absolute; 127 | z-index: -1; 128 | } 129 | 130 | #particles-end .particles-js-canvas-el { 131 | position: absolute; 132 | z-index: -1; 133 | } 134 | 135 | #try_again_btn{ 136 | margin-top: 10px; 137 | height: 70px; 138 | width: 200px; 139 | border-radius: 5px; 140 | font-size: 25px; 141 | border: none; 142 | color: #128053; 143 | background-color: #49ffdc; 144 | &:hover{ 145 | cursor: pointer; 146 | } 147 | } 148 | 149 | .animated { 150 | animation-duration: 1s; 151 | animation-fill-mode: both; 152 | } 153 | 154 | @keyframes fadeOutUp { 155 | from { 156 | opacity: 1; 157 | } 158 | 159 | to { 160 | opacity: 0; 161 | transform: translate3d(0, -100%, 0); 162 | } 163 | } 164 | 165 | .fadeOutUp { 166 | animation-name: fadeOutUp; 167 | } 168 | 169 | @keyframes fadeInUp { 170 | from { 171 | opacity: 0; 172 | transform: translate3d(0, 100%, 0); 173 | } 174 | 175 | to { 176 | opacity: 1; 177 | transform: none; 178 | } 179 | } 180 | 181 | .fadeInUp { 182 | animation-delay: 2s; 183 | animation-name: fadeInUp; 184 | } 185 | 186 | body { 187 | font-size: 62.5%; 188 | font-style: Lobster-Regular; 189 | } 190 | 191 | .animation-box { 192 | width: 75%; 193 | height: 27.5rem; 194 | background-color: blue; 195 | margin: 0 auto; 196 | overflow: hidden; 197 | position: relative; 198 | } 199 | 200 | .animation-container { 201 | width: 1000rem; 202 | height: 30rem; 203 | } 204 | 205 | 206 | @keyframes fadeInOut { 207 | 0% { 208 | opacity: 0; 209 | } 210 | 211 | 45% { 212 | opacity: 1; 213 | } 214 | 215 | 100% { 216 | opacity: 0%; 217 | } 218 | } 219 | 220 | .one-text { 221 | font-size: 3.4rem; 222 | position: absolute; 223 | top: 10.5rem; 224 | left: 10%; 225 | opacity: 0; 226 | color: #49ffdc; 227 | animation-name: fadeInOut; 228 | animation-delay: 0s; 229 | animation-duration: 1s; 230 | } 231 | 232 | 233 | .two-text { 234 | font-size: 3.4rem; 235 | position: absolute; 236 | top: 10.5rem; 237 | left: 10%; 238 | opacity: 0; 239 | color: #49ffdc; 240 | animation-name: fadeInOut; 241 | animation-delay: 1s; 242 | animation-duration: 1s; 243 | } 244 | 245 | 246 | .three-text { 247 | font-size: 3.4rem; 248 | position: absolute; 249 | top: 10.5rem; 250 | left: 10%; 251 | opacity: 0; 252 | color: #49ffdc; 253 | animation-name: fadeInOut; 254 | animation-delay: 2s; 255 | animation-duration: 1s; 256 | } 257 | 258 | .fourth-text { 259 | font-size: 3.4rem; 260 | position: absolute; 261 | top: 10.5rem; 262 | left: 10%; 263 | opacity: 0; 264 | color: #49ffdc; 265 | animation-name: fadeInOut; 266 | animation-delay: 3s; 267 | animation-duration: 1s; 268 | } 269 | 270 | #fourth-text, #three-text, #two-text, #one-text{ 271 | font-size: 100px; 272 | position: absolute; 273 | top: 40%; 274 | left: 49%; 275 | z-index: 3; 276 | opacity: 0; 277 | } 278 | 279 | #fourth-text { 280 | left: 40% !important; 281 | } 282 | 283 | #score { 284 | position: absolute; 285 | font-size: 60px; 286 | z-index: 10; 287 | visibility: hidden; 288 | color: #FAFAFA; 289 | left: 50px; 290 | bottom: 50px; 291 | } 292 | 293 | .score-container{ 294 | color: white; 295 | padding-left: 15px; 296 | text-shadow: 15px 15px 9px rgba(0, 0, 0, 0.1); 297 | font-weight: bold; 298 | } 299 | -------------------------------------------------------------------------------- /public/js/three-animations.js: -------------------------------------------------------------------------------- 1 | var container, stats; 2 | var camera, controls, scene, renderer, sphere, pointCloud; 3 | var brickArray = []; 4 | var topPosition = 165; 5 | var xPadding = 46; 6 | var objectName = 0; 7 | var particleName = 0; 8 | 9 | var movementSpeed = 80; 10 | var totalObjects = 1000; 11 | var objectSize = 10; 12 | var sizeRandomness = 4000; 13 | var dirs = []; 14 | var parts = []; 15 | 16 | 17 | init(); 18 | animate(); 19 | 20 | 21 | function init() { 22 | container = document.createElement( 'div' ); 23 | container.className = "threeElement" 24 | document.body.appendChild( container ); 25 | // document.getElementsByClassName("threeElement")[0].style.display = "none" 26 | 27 | // Create the scene and set the scene size 28 | scene = new THREE.Scene(); 29 | var WIDTH = window.innerWidth; 30 | var HEIGHT = window.innerHeight; 31 | 32 | // Create a camera, zoom it out from the model a bit 33 | camera = new THREE.PerspectiveCamera( 90, WIDTH / HEIGHT, 1, 10000 ); 34 | camera.position.z = 200; 35 | camera.position.y = -35; 36 | 37 | // Create AudioListener 38 | var listener = new THREE.AudioListener() 39 | camera.add(listener); 40 | 41 | // Create global audio source 42 | var sound = new THREE.Audio( listener ); 43 | var audioLoader = new THREE.AudioLoader(); 44 | 45 | audioLoader.load( '../js/sounds/sound.mp3', function( buffer ) { 46 | sound.setBuffer( buffer ); 47 | sound.setLoop(true); 48 | sound.setVolume(0.5); 49 | sound.play(); 50 | }); 51 | 52 | // Create and ambient light 53 | ambLight = new THREE.AmbientLight( 0xcd950c ) 54 | scene.add( ambLight ); 55 | 56 | // Create a spot light 57 | var sptlight = new THREE.SpotLight( 0xffffff, 0.85 ); 58 | sptlight.position.set( 0, -2500, 10000 ); 59 | sptlight.castShadow = true; 60 | sptlight.shadow = new THREE.LightShadow( new THREE.PerspectiveCamera( 50, 1, 200, 10000 ) ); 61 | sptlight.shadow.bias = - 0.00022; 62 | sptlight.shadow.mapSize.width = 2048; 63 | sptlight.shadow.mapSize.height = 2048; 64 | scene.add( sptlight ); 65 | 66 | // This allows the user to move the camera with the mouse 67 | controls = new THREE.TrackballControls( camera ); 68 | controls.rotateSpeed = 1.0; 69 | controls.zoomSpeed = 1.2; 70 | controls.panSpeed = 0.8; 71 | controls.noZoom = false; 72 | controls.noPan = false; 73 | controls.staticMoving = true; 74 | controls.dynamicDampingFactor = 0.3; 75 | 76 | // Create a sphere geometry with materials and Mesh 77 | // var geometry = new THREE.TetrahedronGeometry( 95, 3); 78 | var geometry = new THREE.TetrahedronGeometry(13, 1); 79 | var material = new THREE.MeshPhongMaterial({ 80 | color: 0x33d6ff, 81 | shininess:0, 82 | specular:0xffffff, 83 | shading:THREE.FlatShading 84 | }); 85 | sphere = new THREE.Mesh( geometry, material ); 86 | sphere.position.x = 0 87 | sphere.position.z = 0 88 | sphere.position.y = 120 89 | sphere.castShadow = true; 90 | sphere.receiveShadow = true; 91 | scene.add( sphere ); 92 | 93 | // Create a rectangle geometry 94 | var geometry = new THREE.BoxGeometry(40, 10, 8); 95 | 96 | // For loop that creates each object on the first row with a random color 97 | for ( var i = 0; i < 12; i ++ ) { 98 | var material = new THREE.MeshPhongMaterial( { color: Math.random() * 0xffffff } ) 99 | var object = new THREE.Mesh( geometry, material); 100 | object.position.x = -252 + (i*xPadding); 101 | object.position.y = topPosition + 60; 102 | object.position.z = 0; 103 | object.castShadow = true; 104 | object.receiveShadow = true; 105 | object.status = 1; 106 | object.row = 1; 107 | object.name = objectName.toString(); 108 | object.isPowerup = 0; 109 | objectName++; 110 | scene.add( object ); 111 | brickArray.push( object ); 112 | } 113 | 114 | // For loop that creates each object on the second row with a random color 115 | for ( var i = 0; i < 10; i ++ ) { 116 | var material = new THREE.MeshPhongMaterial( { color: Math.random() * 0xffffff, name: 'object' + i } ) 117 | var object = new THREE.Mesh( geometry, material); 118 | object.position.x = -205 + (i*xPadding); 119 | object.position.y = topPosition+30; 120 | object.position.z = 0; 121 | object.castShadow = true; 122 | object.receiveShadow = true; 123 | object.status = 1; 124 | object.isPowerup = 0; 125 | object.row = 2; 126 | object.name = objectName.toString(); 127 | objectName++; 128 | scene.add( object ); 129 | brickArray.push( object ); 130 | } 131 | 132 | // For loop that creates each object on the third row with a random color 133 | for ( var i = 0; i < 11; i ++ ) { 134 | var material = new THREE.MeshPhongMaterial( { color: Math.random() * 0xffffff } ) 135 | var object = new THREE.Mesh( geometry, material); 136 | object.position.x = -238 + (i*(xPadding+1)); 137 | object.position.y = topPosition; 138 | object.position.z = 0; 139 | object.castShadow = true; 140 | object.receiveShadow = true; 141 | object.isPowerup = 0; 142 | object.status = 1; 143 | object.row = 3; 144 | object.name = objectName.toString(); 145 | objectName++; 146 | scene.add( object ); 147 | brickArray.push( object ); 148 | } 149 | 150 | // Renders everything 151 | 152 | renderer = new THREE.WebGLRenderer( { alpha: true } ); 153 | renderer.setClearColor( 0xb8e9f2, 0); 154 | renderer.setPixelRatio( window.devicePixelRatio ); 155 | renderer.setSize( WIDTH, HEIGHT ); //set the width and height of rendered 156 | renderer.sortObjects = false; 157 | renderer.shadowMap.enabled = true; 158 | container.appendChild( renderer.domElement ); 159 | 160 | 161 | window.addEventListener( 'resize', onWindowResize, false ); 162 | 163 | } 164 | // END OF INIT FUNCTION 165 | 166 | // RESIZES THE RENDERER WITH THE BROWSER WINDOW 167 | function onWindowResize() { 168 | camera.aspect = WIDTH / HEIGHT; 169 | camera.updateProjectionMatrix(); 170 | renderer.setSize( WIDTH, HEIGHT ); 171 | } 172 | 173 | function ExplodeAnimation(x,y) { 174 | var geometry = new THREE.Geometry(); 175 | 176 | for (i = 0; i < totalObjects; i ++) { 177 | var vertex = new THREE.Vector3(); 178 | vertex.x = x; 179 | vertex.y = y; 180 | vertex.z = 0; 181 | 182 | geometry.vertices.push( vertex ); 183 | dirs.push({x:(Math.random() * movementSpeed)-(movementSpeed/2),y:(Math.random() * movementSpeed)-(movementSpeed/2),z:(Math.random() * movementSpeed)-(movementSpeed/2)}); 184 | } 185 | var material = new THREE.PointsMaterial( { size: objectSize, color: colors[Math.round(Math.random() * colors.length)] }); 186 | var particles = new THREE.Points( geometry, material ); 187 | 188 | this.object = particles; 189 | this.status = true; 190 | 191 | this.xDir = (Math.random() * movementSpeed)-(movementSpeed/2); 192 | this.yDir = (Math.random() * movementSpeed)-(movementSpeed/2); 193 | this.zDir = (Math.random() * movementSpeed)-(movementSpeed/2); 194 | 195 | scene.add( this.object ); 196 | 197 | this.update = function(){ 198 | if (this.status == true){ 199 | var pCount = totalObjects; 200 | while(pCount--) { 201 | var particle = this.object.geometry.vertices[pCount] 202 | particle.y += 2*dirs[pCount].y; 203 | particle.x += 2*dirs[pCount].x; 204 | particle.z += 2*dirs[pCount].z; 205 | } 206 | this.object.geometry.verticesNeedUpdate = true; 207 | } 208 | } 209 | 210 | } 211 | 212 | 213 | function addRow () { 214 | var geometry = new THREE.BoxGeometry(40, 10, 8); 215 | for ( var i = 0; i < 12; i ++ ) { 216 | const num = Math.random(); 217 | if(num < 0.7 ){ 218 | var material = new THREE.MeshPhongMaterial( { color: Math.random() * 0xffffff } ) 219 | var object = new THREE.Mesh( geometry, material); 220 | object.position.x = -252 + (i*xPadding); 221 | object.position.y = topPosition + 60; 222 | object.position.z = 0; 223 | object.castShadow = true; 224 | object.receiveShadow = true; 225 | object.status = 1; 226 | object.row = 1; 227 | object.isPowerup = 0; 228 | object.name = objectName.toString(); 229 | objectName++; 230 | // console.log(object) 231 | scene.add( object ); 232 | brickArray.push( object ); 233 | } else if (num < 0.77){ 234 | let geometry = new THREE.TorusGeometry( 10, 3, 16, 100 ); 235 | let material = new THREE.MeshToonMaterial( { color: Math.random() * 0xffffff } ); 236 | let torus = new THREE.Mesh( geometry, material ); 237 | torus.position.x = -252 + (i*xPadding); 238 | torus.position.y = topPosition + 60; 239 | torus.position.z = 0; 240 | torus.rotation.z = 0.5; 241 | torus.status = 1; 242 | torus.isPowerup = 1; 243 | torus.name = objectName.toString(); 244 | brickArray.push( torus ); 245 | scene.add( torus ); 246 | } 247 | } 248 | 249 | } 250 | 251 | // Create the animate function 252 | function animate() { 253 | requestAnimationFrame( animate ) 254 | render(); 255 | } 256 | 257 | 258 | // Create the render function 259 | function render() { 260 | // controls.update(); 261 | sphere.rotation.x += 0.05; 262 | sphere.rotation.y += 0.01; 263 | sphere.position.x = -(ball_x_position/1.85)+270 264 | sphere.position.y = -(ball_y_position/1.85)+215 265 | 266 | var pCount = parts.length; 267 | while(pCount--) { 268 | parts[pCount].update(); 269 | } 270 | renderer.render( scene, camera); 271 | } 272 | 273 | document.getElementById("start_game_btn").addEventListener('click', function(){ 274 | 275 | document.getElementsByClassName("start_game_menu")[0].className += " animated fadeOutUp"; 276 | // document.getElementsByClassName("start_game_menu")[0].style.display = "none"; 277 | 278 | document.getElementsByClassName("game_screen")[0].style.display = "block"; 279 | document.getElementsByClassName("score-container")[0].style.display = "block"; 280 | var item = document.getElementById("fourth-text") 281 | var item1 = document.getElementById("three-text") 282 | var item2 = document.getElementById("two-text") 283 | var item3 = document.getElementById("one-text") 284 | 285 | document.getElementById("score").style.visibility = "visible"; 286 | item.className = "fourth-text" 287 | item1.className = "three-text" 288 | item2.className = "two-text" 289 | item3.className = "one-text" 290 | 291 | interval_id = setInterval(addRow, 5000); 292 | 293 | setTimeout(updateSpeed, 7000) 294 | 295 | setTimeout(function(){ 296 | gameHasStarted = true; 297 | }, 4000); 298 | }) 299 | -------------------------------------------------------------------------------- /public/logo.svg: -------------------------------------------------------------------------------- 1 | 28 | -------------------------------------------------------------------------------- /scss/logo-animation.scss: -------------------------------------------------------------------------------- 1 | 2 | @-webkit-keyframes intelligo-logo-r3_Animation { 3 | 0% { 4 | opacity: 1; 5 | } 6 | 1.11% { 7 | opacity: 0; 8 | } 9 | 90% { 10 | opacity: 0; 11 | } 12 | 98.89% { 13 | opacity: 1; 14 | } 15 | 100% { 16 | opacity: 1; 17 | } 18 | } 19 | 20 | @keyframes intelligo-logo-r3_Animation { 21 | 0% { 22 | opacity: 1; 23 | } 24 | 1.11% { 25 | opacity: 0; 26 | } 27 | 90% { 28 | opacity: 0; 29 | } 30 | 98.89% { 31 | opacity: 1; 32 | } 33 | 100% { 34 | opacity: 1; 35 | } 36 | } 37 | 38 | @-webkit-keyframes intelligo-logo-r1_Animation { 39 | 0% { 40 | opacity: 1; 41 | } 42 | 1.11% { 43 | opacity: 0; 44 | } 45 | 81.11% { 46 | opacity: 0; 47 | } 48 | 90% { 49 | opacity: 1; 50 | } 51 | 100% { 52 | opacity: 1; 53 | } 54 | } 55 | 56 | @keyframes intelligo-logo-r1_Animation { 57 | 0% { 58 | opacity: 1; 59 | } 60 | 1.11% { 61 | opacity: 0; 62 | } 63 | 81.11% { 64 | opacity: 0; 65 | } 66 | 90% { 67 | opacity: 1; 68 | } 69 | 100% { 70 | opacity: 1; 71 | } 72 | } 73 | 74 | @-webkit-keyframes intelligo-logo-r2_Animation { 75 | 0% { 76 | opacity: 1; 77 | } 78 | 1.11% { 79 | opacity: 0; 80 | } 81 | 70% { 82 | opacity: 0; 83 | } 84 | 81.11% { 85 | opacity: 1; 86 | } 87 | 100% { 88 | opacity: 1; 89 | } 90 | } 91 | 92 | @keyframes intelligo-logo-r2_Animation { 93 | 0% { 94 | opacity: 1; 95 | } 96 | 1.11% { 97 | opacity: 0; 98 | } 99 | 70% { 100 | opacity: 0; 101 | } 102 | 81.11% { 103 | opacity: 1; 104 | } 105 | 100% { 106 | opacity: 1; 107 | } 108 | } 109 | 110 | @-webkit-keyframes intelligo-logo-r4_Animation { 111 | 0% { 112 | opacity: 1; 113 | } 114 | 1.11% { 115 | opacity: 0; 116 | } 117 | 58.89% { 118 | opacity: 0; 119 | } 120 | 70% { 121 | opacity: 1; 122 | } 123 | 100% { 124 | opacity: 1; 125 | } 126 | } 127 | 128 | @keyframes intelligo-logo-r4_Animation { 129 | 0% { 130 | opacity: 1; 131 | } 132 | 1.11% { 133 | opacity: 0; 134 | } 135 | 58.89% { 136 | opacity: 0; 137 | } 138 | 70% { 139 | opacity: 1; 140 | } 141 | 100% { 142 | opacity: 1; 143 | } 144 | } 145 | 146 | @-webkit-keyframes intelligo-logo-top_Animation { 147 | 0% { 148 | opacity: 1; 149 | } 150 | 1.11% { 151 | opacity: 0; 152 | } 153 | 48.89% { 154 | opacity: 0; 155 | } 156 | 58.89% { 157 | opacity: 1; 158 | } 159 | 100% { 160 | opacity: 1; 161 | } 162 | } 163 | 164 | @keyframes intelligo-logo-top_Animation { 165 | 0% { 166 | opacity: 1; 167 | } 168 | 1.11% { 169 | opacity: 0; 170 | } 171 | 48.89% { 172 | opacity: 0; 173 | } 174 | 58.89% { 175 | opacity: 1; 176 | } 177 | 100% { 178 | opacity: 1; 179 | } 180 | } 181 | 182 | @-webkit-keyframes intelligo-logo-bottom_Animation { 183 | 0% { 184 | opacity: 1; 185 | } 186 | 1.11% { 187 | opacity: 0; 188 | } 189 | 40% { 190 | opacity: 0; 191 | } 192 | 48.89% { 193 | opacity: 1; 194 | } 195 | 100% { 196 | opacity: 1; 197 | } 198 | } 199 | 200 | @keyframes intelligo-logo-bottom_Animation { 201 | 0% { 202 | opacity: 1; 203 | } 204 | 1.11% { 205 | opacity: 0; 206 | } 207 | 40% { 208 | opacity: 0; 209 | } 210 | 48.89% { 211 | opacity: 1; 212 | } 213 | 100% { 214 | opacity: 1; 215 | } 216 | } 217 | 218 | @-webkit-keyframes intelligo-logo-center-b_Animation { 219 | 0% { 220 | opacity: 1; 221 | } 222 | 1.11% { 223 | opacity: 0; 224 | } 225 | 30% { 226 | opacity: 0; 227 | } 228 | 40% { 229 | opacity: 1; 230 | } 231 | 100% { 232 | opacity: 1; 233 | } 234 | } 235 | 236 | @keyframes intelligo-logo-center-b_Animation { 237 | 0% { 238 | opacity: 1; 239 | } 240 | 1.11% { 241 | opacity: 0; 242 | } 243 | 30% { 244 | opacity: 0; 245 | } 246 | 40% { 247 | opacity: 1; 248 | } 249 | 100% { 250 | opacity: 1; 251 | } 252 | } 253 | 254 | @-webkit-keyframes intelligo-logo-center_Animation { 255 | 0% { 256 | opacity: 1; 257 | } 258 | 1.11% { 259 | opacity: 0; 260 | } 261 | 20% { 262 | opacity: 0; 263 | } 264 | 30% { 265 | opacity: 1; 266 | } 267 | 100% { 268 | opacity: 1; 269 | } 270 | } 271 | 272 | @keyframes intelligo-logo-center_Animation { 273 | 0% { 274 | opacity: 1; 275 | } 276 | 1.11% { 277 | opacity: 0; 278 | } 279 | 20% { 280 | opacity: 0; 281 | } 282 | 30% { 283 | opacity: 1; 284 | } 285 | 100% { 286 | opacity: 1; 287 | } 288 | } 289 | 290 | @-webkit-keyframes intelligo-logo-center-a_Animation { 291 | 0% { 292 | opacity: 1; 293 | } 294 | 1.11% { 295 | opacity: 0; 296 | } 297 | 10% { 298 | opacity: 1; 299 | } 300 | 100% { 301 | opacity: 1; 302 | } 303 | } 304 | 305 | @keyframes intelligo-logo-center-a_Animation { 306 | 0% { 307 | opacity: 1; 308 | } 309 | 1.11% { 310 | opacity: 0; 311 | } 312 | 10% { 313 | opacity: 1; 314 | } 315 | 100% { 316 | opacity: 1; 317 | } 318 | } 319 | 320 | @-webkit-keyframes intelligo-logo-center-c_Animation { 321 | 0% { 322 | opacity: 1; 323 | } 324 | 1.11% { 325 | opacity: 0; 326 | } 327 | 10% { 328 | opacity: 0; 329 | } 330 | 20% { 331 | opacity: 1; 332 | } 333 | 100% { 334 | opacity: 1; 335 | } 336 | } 337 | 338 | @keyframes intelligo-logo-center-c_Animation { 339 | 0% { 340 | opacity: 1; 341 | } 342 | 1.11% { 343 | opacity: 0; 344 | } 345 | 10% { 346 | opacity: 0; 347 | } 348 | 20% { 349 | opacity: 1; 350 | } 351 | 100% { 352 | opacity: 1; 353 | } 354 | } 355 | 356 | #intelligo-logo * { 357 | -webkit-animation-duration: 3s; 358 | animation-duration: 3s; 359 | -webkit-animation-timing-function: cubic-bezier(0, 0, 1, 1); 360 | animation-timing-function: cubic-bezier(0, 0, 1, 1); 361 | } 362 | 363 | #intelligo-logo-center-a { 364 | fill: #333475; 365 | -webkit-transform-origin: 50% 50%; 366 | transform-origin: 50% 50%; 367 | transform-box: fill-box; 368 | -webkit-animation-name: intelligo-logo-center-a_Animation; 369 | animation-name: intelligo-logo-center-a_Animation; 370 | opacity: 1; 371 | } 372 | 373 | #intelligo-logo-center-c { 374 | fill: #afb2bc; 375 | -webkit-animation-name: intelligo-logo-center-c_Animation; 376 | animation-name: intelligo-logo-center-c_Animation; 377 | -webkit-transform-origin: 50% 50%; 378 | transform-origin: 50% 50%; 379 | transform-box: fill-box; 380 | opacity: 1; 381 | } 382 | 383 | #intelligo-logo-r1-c1 { 384 | fill: #333475; 385 | } 386 | 387 | #intelligo-logo-r1-c2 { 388 | fill: #333475; 389 | } 390 | 391 | #intelligo-logo-r2-c1 { 392 | fill: #333475; 393 | } 394 | 395 | #intelligo-logo-r2-c2 { 396 | fill: #333475; 397 | } 398 | 399 | #intelligo-logo-r3-c1 { 400 | fill: #333475; 401 | } 402 | 403 | #intelligo-logo-r3-c2 { 404 | fill: #333475; 405 | } 406 | 407 | #intelligo-logo-r4-c1 { 408 | fill: #333475; 409 | } 410 | 411 | #intelligo-logo-r4-c2 { 412 | fill: #333475; 413 | } 414 | 415 | #intelligo-logo-center { 416 | fill: #afb2bc; 417 | -webkit-animation-name: intelligo-logo-center_Animation; 418 | animation-name: intelligo-logo-center_Animation; 419 | -webkit-transform-origin: 50% 50%; 420 | transform-origin: 50% 50%; 421 | transform-box: fill-box; 422 | opacity: 1; 423 | } 424 | 425 | #intelligo-logo-center-b { 426 | fill: #333475; 427 | -webkit-transform-origin: 50% 50%; 428 | transform-origin: 50% 50%; 429 | transform-box: fill-box; 430 | -webkit-animation-name: intelligo-logo-center-b_Animation; 431 | animation-name: intelligo-logo-center-b_Animation; 432 | opacity: 1; 433 | } 434 | 435 | #intelligo-logo-center-a_r1Qk_ay-m { 436 | -webkit-transform-origin: 50% 50%; 437 | transform-origin: 50% 50%; 438 | transform-box: fill-box; 439 | -webkit-transform: scale(1, 1); 440 | transform: scale(1, 1); 441 | } 442 | 443 | #intelligo-logo-center-a_SkwrKpJ-X { 444 | -webkit-transform-origin: 50% 50%; 445 | transform-origin: 50% 50%; 446 | transform-box: fill-box; 447 | -webkit-transform: translate(0px, 0px); 448 | transform: translate(0px, 0px); 449 | } 450 | 451 | #intelligo-logo-center-a_HJa6FT1bm { 452 | -webkit-transform-origin: 50% 50%; 453 | transform-origin: 50% 50%; 454 | transform-box: fill-box; 455 | -webkit-transform: rotate(0deg); 456 | transform: rotate(0deg); 457 | } 458 | 459 | #intelligo-logo-r2 { 460 | -webkit-animation-name: intelligo-logo-r2_Animation; 461 | animation-name: intelligo-logo-r2_Animation; 462 | -webkit-transform-origin: 50% 50%; 463 | transform-origin: 50% 50%; 464 | transform-box: fill-box; 465 | opacity: 1; 466 | } 467 | 468 | #intelligo-logo-center-a_HJ1b5akbQ { 469 | -webkit-transform-origin: 50% 50%; 470 | transform-origin: 50% 50%; 471 | transform-box: fill-box; 472 | -webkit-transform: translate(0px, 0px); 473 | transform: translate(0px, 0px); 474 | } 475 | 476 | #intelligo-logo-center-b_ryNOh61bX { 477 | -webkit-transform-origin: 50% 50%; 478 | transform-origin: 50% 50%; 479 | transform-box: fill-box; 480 | -webkit-transform: rotate(360deg); 481 | transform: rotate(360deg); 482 | } 483 | 484 | #intelligo-logo-bottom { 485 | fill: #afb2bc; 486 | -webkit-animation-name: intelligo-logo-bottom_Animation; 487 | animation-name: intelligo-logo-bottom_Animation; 488 | -webkit-transform-origin: 50% 50%; 489 | transform-origin: 50% 50%; 490 | transform-box: fill-box; 491 | opacity: 1; 492 | } 493 | 494 | #intelligo-logo-top { 495 | fill: #afb2bc; 496 | -webkit-animation-name: intelligo-logo-top_Animation; 497 | animation-name: intelligo-logo-top_Animation; 498 | -webkit-transform-origin: 50% 50%; 499 | transform-origin: 50% 50%; 500 | transform-box: fill-box; 501 | opacity: 1; 502 | } 503 | 504 | #intelligo-logo-r4 { 505 | -webkit-animation-name: intelligo-logo-r4_Animation; 506 | animation-name: intelligo-logo-r4_Animation; 507 | -webkit-transform-origin: 50% 50%; 508 | transform-origin: 50% 50%; 509 | transform-box: fill-box; 510 | opacity: 1; 511 | } 512 | 513 | #intelligo-logo-top_SJzqQ0kZ7 { 514 | -webkit-transform-origin: 50% 50%; 515 | transform-origin: 50% 50%; 516 | transform-box: fill-box; 517 | -webkit-transform: scale(0.5, 1); 518 | transform: scale(0.5, 1); 519 | } 520 | 521 | #intelligo-logo-r1 { 522 | -webkit-animation-name: intelligo-logo-r1_Animation; 523 | animation-name: intelligo-logo-r1_Animation; 524 | -webkit-transform-origin: 50% 50%; 525 | transform-origin: 50% 50%; 526 | transform-box: fill-box; 527 | opacity: 1; 528 | } 529 | 530 | #intelligo-logo-r3 { 531 | -webkit-animation-name: intelligo-logo-r3_Animation; 532 | animation-name: intelligo-logo-r3_Animation; 533 | -webkit-transform-origin: 50% 50%; 534 | transform-origin: 50% 50%; 535 | transform-box: fill-box; 536 | opacity: 1; 537 | } 538 | -------------------------------------------------------------------------------- /public/css/main.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Lobster-Regular"; 3 | src: url("/fonts/Lobster-Regular/Lobster-Regular.eot"); 4 | src: url("/fonts/Lobster-Regular/Lobster-Regular.eot?#iefix") format("embedded-opentype"), url("/fonts/Lobster-Regular/Lobster-Regular.woff") format("woff"), url("/fonts/Lobster-Regular/Lobster-Regular.ttf") format("truetype"), url("/fonts/Lobster-Regular/Lobster-Regular.svg#aller") format("svg"); 5 | font-weight: normal; 6 | font-style: normal; } 7 | 8 | * { 9 | padding: 0; 10 | margin: 0; } 11 | 12 | html, body { 13 | font-family: Lobster-Regular, arial, sans-serif; 14 | height: 100%; 15 | width: 100%; 16 | overflow: hidden; } 17 | 18 | #canvas { 19 | width: 100%; 20 | height: 100%; 21 | transform: rotateY(180deg); 22 | position: absolute; } 23 | 24 | #my_velocityvideo { 25 | /* hard coding so that it hides behind the canvas*/ 26 | position: absolute; 27 | top: 50px; 28 | left: 500px; 29 | z-index: -1; } 30 | 31 | div { 32 | position: absolute; 33 | left: 0px; } 34 | 35 | .start_game_menu { 36 | position: absolute; 37 | width: 100%; 38 | height: 100%; 39 | background-color: transparent; 40 | display: flex; 41 | flex-direction: column; 42 | justify-content: center; 43 | align-items: center; 44 | z-index: 1; } 45 | .start_game_menu h1 { 46 | font-size: 50px; 47 | padding: 10px; 48 | color: #FAFAFA; } 49 | 50 | p { 51 | font-size: 20px; } 52 | 53 | #start_game_btn { 54 | font-family: Lobster-Regular, arial, sans-serif; 55 | margin-top: 10px; 56 | height: 70px; 57 | width: 200px; 58 | border-radius: 5px; 59 | font-size: 25px; 60 | border: none; 61 | z-index: 5; 62 | color: #128053; 63 | background-color: #49ffdc; } 64 | #start_game_btn:hover { 65 | cursor: pointer; } 66 | 67 | .end_game_menu { 68 | position: absolute; 69 | width: 100%; 70 | height: 100%; 71 | padding-top: 10px; 72 | background-color: transparent; 73 | display: flex; 74 | flex-direction: column; 75 | justify-content: center; 76 | align-items: center; 77 | z-index: 100; } 78 | .end_game_menu h1 { 79 | padding: 10px; 80 | font-size: 50px; 81 | color: #14e393; } 82 | .end_game_menu h2 { 83 | color: #fafafa; 84 | padding: 10px; 85 | font-size: 30px; } 86 | .end_game_menu ol { 87 | color: #fafafa; } 88 | .end_game_menu ol li p { 89 | color: #fafafa; 90 | float: left; 91 | margin-left: 5px; } 92 | 93 | .end_game_menu p { 94 | color: #afb2bc; } 95 | 96 | #particles-start .particles-js-canvas-el { 97 | position: absolute; 98 | z-index: -1; } 99 | 100 | #particles-end .particles-js-canvas-el { 101 | position: absolute; 102 | z-index: -1; } 103 | 104 | #try_again_btn { 105 | margin-top: 10px; 106 | height: 70px; 107 | width: 200px; 108 | border-radius: 5px; 109 | font-size: 25px; 110 | border: none; 111 | color: #128053; 112 | background-color: #49ffdc; } 113 | #try_again_btn:hover { 114 | cursor: pointer; } 115 | 116 | .animated { 117 | animation-duration: 1s; 118 | animation-fill-mode: both; } 119 | 120 | @keyframes fadeOutUp { 121 | from { 122 | opacity: 1; } 123 | to { 124 | opacity: 0; 125 | transform: translate3d(0, -100%, 0); } } 126 | 127 | .fadeOutUp { 128 | animation-name: fadeOutUp; } 129 | 130 | @keyframes fadeInUp { 131 | from { 132 | opacity: 0; 133 | transform: translate3d(0, 100%, 0); } 134 | to { 135 | opacity: 1; 136 | transform: none; } } 137 | 138 | .fadeInUp { 139 | animation-delay: 2s; 140 | animation-name: fadeInUp; } 141 | 142 | body { 143 | font-size: 62.5%; 144 | font-style: Lobster-Regular; } 145 | 146 | .animation-box { 147 | width: 75%; 148 | height: 27.5rem; 149 | background-color: blue; 150 | margin: 0 auto; 151 | overflow: hidden; 152 | position: relative; } 153 | 154 | .animation-container { 155 | width: 1000rem; 156 | height: 30rem; } 157 | 158 | @keyframes fadeInOut { 159 | 0% { 160 | opacity: 0; } 161 | 45% { 162 | opacity: 1; } 163 | 100% { 164 | opacity: 0%; } } 165 | 166 | .one-text { 167 | font-size: 3.4rem; 168 | position: absolute; 169 | top: 10.5rem; 170 | left: 10%; 171 | opacity: 0; 172 | color: #49ffdc; 173 | animation-name: fadeInOut; 174 | animation-delay: 0s; 175 | animation-duration: 1s; } 176 | 177 | .two-text { 178 | font-size: 3.4rem; 179 | position: absolute; 180 | top: 10.5rem; 181 | left: 10%; 182 | opacity: 0; 183 | color: #49ffdc; 184 | animation-name: fadeInOut; 185 | animation-delay: 1s; 186 | animation-duration: 1s; } 187 | 188 | .three-text { 189 | font-size: 3.4rem; 190 | position: absolute; 191 | top: 10.5rem; 192 | left: 10%; 193 | opacity: 0; 194 | color: #49ffdc; 195 | animation-name: fadeInOut; 196 | animation-delay: 2s; 197 | animation-duration: 1s; } 198 | 199 | .fourth-text { 200 | font-size: 3.4rem; 201 | position: absolute; 202 | top: 10.5rem; 203 | left: 10%; 204 | opacity: 0; 205 | color: #49ffdc; 206 | animation-name: fadeInOut; 207 | animation-delay: 3s; 208 | animation-duration: 1s; } 209 | 210 | #fourth-text, #three-text, #two-text, #one-text { 211 | font-size: 100px; 212 | position: absolute; 213 | top: 40%; 214 | left: 49%; 215 | z-index: 3; 216 | opacity: 0; } 217 | 218 | #fourth-text { 219 | left: 40% !important; } 220 | 221 | #score { 222 | position: absolute; 223 | font-size: 60px; 224 | z-index: 10; 225 | visibility: hidden; 226 | color: #FAFAFA; 227 | left: 50px; 228 | bottom: 50px; } 229 | 230 | .score-container { 231 | color: white; 232 | padding-left: 15px; 233 | text-shadow: 15px 15px 9px rgba(0, 0, 0, 0.1); 234 | font-weight: bold; } 235 | 236 | @-webkit-keyframes intelligo-logo-r3_Animation { 237 | 0% { 238 | opacity: 1; } 239 | 1.11% { 240 | opacity: 0; } 241 | 90% { 242 | opacity: 0; } 243 | 98.89% { 244 | opacity: 1; } 245 | 100% { 246 | opacity: 1; } } 247 | 248 | @keyframes intelligo-logo-r3_Animation { 249 | 0% { 250 | opacity: 1; } 251 | 1.11% { 252 | opacity: 0; } 253 | 90% { 254 | opacity: 0; } 255 | 98.89% { 256 | opacity: 1; } 257 | 100% { 258 | opacity: 1; } } 259 | 260 | @-webkit-keyframes intelligo-logo-r1_Animation { 261 | 0% { 262 | opacity: 1; } 263 | 1.11% { 264 | opacity: 0; } 265 | 81.11% { 266 | opacity: 0; } 267 | 90% { 268 | opacity: 1; } 269 | 100% { 270 | opacity: 1; } } 271 | 272 | @keyframes intelligo-logo-r1_Animation { 273 | 0% { 274 | opacity: 1; } 275 | 1.11% { 276 | opacity: 0; } 277 | 81.11% { 278 | opacity: 0; } 279 | 90% { 280 | opacity: 1; } 281 | 100% { 282 | opacity: 1; } } 283 | 284 | @-webkit-keyframes intelligo-logo-r2_Animation { 285 | 0% { 286 | opacity: 1; } 287 | 1.11% { 288 | opacity: 0; } 289 | 70% { 290 | opacity: 0; } 291 | 81.11% { 292 | opacity: 1; } 293 | 100% { 294 | opacity: 1; } } 295 | 296 | @keyframes intelligo-logo-r2_Animation { 297 | 0% { 298 | opacity: 1; } 299 | 1.11% { 300 | opacity: 0; } 301 | 70% { 302 | opacity: 0; } 303 | 81.11% { 304 | opacity: 1; } 305 | 100% { 306 | opacity: 1; } } 307 | 308 | @-webkit-keyframes intelligo-logo-r4_Animation { 309 | 0% { 310 | opacity: 1; } 311 | 1.11% { 312 | opacity: 0; } 313 | 58.89% { 314 | opacity: 0; } 315 | 70% { 316 | opacity: 1; } 317 | 100% { 318 | opacity: 1; } } 319 | 320 | @keyframes intelligo-logo-r4_Animation { 321 | 0% { 322 | opacity: 1; } 323 | 1.11% { 324 | opacity: 0; } 325 | 58.89% { 326 | opacity: 0; } 327 | 70% { 328 | opacity: 1; } 329 | 100% { 330 | opacity: 1; } } 331 | 332 | @-webkit-keyframes intelligo-logo-top_Animation { 333 | 0% { 334 | opacity: 1; } 335 | 1.11% { 336 | opacity: 0; } 337 | 48.89% { 338 | opacity: 0; } 339 | 58.89% { 340 | opacity: 1; } 341 | 100% { 342 | opacity: 1; } } 343 | 344 | @keyframes intelligo-logo-top_Animation { 345 | 0% { 346 | opacity: 1; } 347 | 1.11% { 348 | opacity: 0; } 349 | 48.89% { 350 | opacity: 0; } 351 | 58.89% { 352 | opacity: 1; } 353 | 100% { 354 | opacity: 1; } } 355 | 356 | @-webkit-keyframes intelligo-logo-bottom_Animation { 357 | 0% { 358 | opacity: 1; } 359 | 1.11% { 360 | opacity: 0; } 361 | 40% { 362 | opacity: 0; } 363 | 48.89% { 364 | opacity: 1; } 365 | 100% { 366 | opacity: 1; } } 367 | 368 | @keyframes intelligo-logo-bottom_Animation { 369 | 0% { 370 | opacity: 1; } 371 | 1.11% { 372 | opacity: 0; } 373 | 40% { 374 | opacity: 0; } 375 | 48.89% { 376 | opacity: 1; } 377 | 100% { 378 | opacity: 1; } } 379 | 380 | @-webkit-keyframes intelligo-logo-center-b_Animation { 381 | 0% { 382 | opacity: 1; } 383 | 1.11% { 384 | opacity: 0; } 385 | 30% { 386 | opacity: 0; } 387 | 40% { 388 | opacity: 1; } 389 | 100% { 390 | opacity: 1; } } 391 | 392 | @keyframes intelligo-logo-center-b_Animation { 393 | 0% { 394 | opacity: 1; } 395 | 1.11% { 396 | opacity: 0; } 397 | 30% { 398 | opacity: 0; } 399 | 40% { 400 | opacity: 1; } 401 | 100% { 402 | opacity: 1; } } 403 | 404 | @-webkit-keyframes intelligo-logo-center_Animation { 405 | 0% { 406 | opacity: 1; } 407 | 1.11% { 408 | opacity: 0; } 409 | 20% { 410 | opacity: 0; } 411 | 30% { 412 | opacity: 1; } 413 | 100% { 414 | opacity: 1; } } 415 | 416 | @keyframes intelligo-logo-center_Animation { 417 | 0% { 418 | opacity: 1; } 419 | 1.11% { 420 | opacity: 0; } 421 | 20% { 422 | opacity: 0; } 423 | 30% { 424 | opacity: 1; } 425 | 100% { 426 | opacity: 1; } } 427 | 428 | @-webkit-keyframes intelligo-logo-center-a_Animation { 429 | 0% { 430 | opacity: 1; } 431 | 1.11% { 432 | opacity: 0; } 433 | 10% { 434 | opacity: 1; } 435 | 100% { 436 | opacity: 1; } } 437 | 438 | @keyframes intelligo-logo-center-a_Animation { 439 | 0% { 440 | opacity: 1; } 441 | 1.11% { 442 | opacity: 0; } 443 | 10% { 444 | opacity: 1; } 445 | 100% { 446 | opacity: 1; } } 447 | 448 | @-webkit-keyframes intelligo-logo-center-c_Animation { 449 | 0% { 450 | opacity: 1; } 451 | 1.11% { 452 | opacity: 0; } 453 | 10% { 454 | opacity: 0; } 455 | 20% { 456 | opacity: 1; } 457 | 100% { 458 | opacity: 1; } } 459 | 460 | @keyframes intelligo-logo-center-c_Animation { 461 | 0% { 462 | opacity: 1; } 463 | 1.11% { 464 | opacity: 0; } 465 | 10% { 466 | opacity: 0; } 467 | 20% { 468 | opacity: 1; } 469 | 100% { 470 | opacity: 1; } } 471 | 472 | #intelligo-logo * { 473 | -webkit-animation-duration: 3s; 474 | animation-duration: 3s; 475 | -webkit-animation-timing-function: cubic-bezier(0, 0, 1, 1); 476 | animation-timing-function: cubic-bezier(0, 0, 1, 1); } 477 | 478 | #intelligo-logo-center-a { 479 | fill: #333475; 480 | -webkit-transform-origin: 50% 50%; 481 | transform-origin: 50% 50%; 482 | transform-box: fill-box; 483 | -webkit-animation-name: intelligo-logo-center-a_Animation; 484 | animation-name: intelligo-logo-center-a_Animation; 485 | opacity: 1; } 486 | 487 | #intelligo-logo-center-c { 488 | fill: #afb2bc; 489 | -webkit-animation-name: intelligo-logo-center-c_Animation; 490 | animation-name: intelligo-logo-center-c_Animation; 491 | -webkit-transform-origin: 50% 50%; 492 | transform-origin: 50% 50%; 493 | transform-box: fill-box; 494 | opacity: 1; } 495 | 496 | #intelligo-logo-r1-c1 { 497 | fill: #333475; } 498 | 499 | #intelligo-logo-r1-c2 { 500 | fill: #333475; } 501 | 502 | #intelligo-logo-r2-c1 { 503 | fill: #333475; } 504 | 505 | #intelligo-logo-r2-c2 { 506 | fill: #333475; } 507 | 508 | #intelligo-logo-r3-c1 { 509 | fill: #333475; } 510 | 511 | #intelligo-logo-r3-c2 { 512 | fill: #333475; } 513 | 514 | #intelligo-logo-r4-c1 { 515 | fill: #333475; } 516 | 517 | #intelligo-logo-r4-c2 { 518 | fill: #333475; } 519 | 520 | #intelligo-logo-center { 521 | fill: #afb2bc; 522 | -webkit-animation-name: intelligo-logo-center_Animation; 523 | animation-name: intelligo-logo-center_Animation; 524 | -webkit-transform-origin: 50% 50%; 525 | transform-origin: 50% 50%; 526 | transform-box: fill-box; 527 | opacity: 1; } 528 | 529 | #intelligo-logo-center-b { 530 | fill: #333475; 531 | -webkit-transform-origin: 50% 50%; 532 | transform-origin: 50% 50%; 533 | transform-box: fill-box; 534 | -webkit-animation-name: intelligo-logo-center-b_Animation; 535 | animation-name: intelligo-logo-center-b_Animation; 536 | opacity: 1; } 537 | 538 | #intelligo-logo-center-a_r1Qk_ay-m { 539 | -webkit-transform-origin: 50% 50%; 540 | transform-origin: 50% 50%; 541 | transform-box: fill-box; 542 | -webkit-transform: scale(1, 1); 543 | transform: scale(1, 1); } 544 | 545 | #intelligo-logo-center-a_SkwrKpJ-X { 546 | -webkit-transform-origin: 50% 50%; 547 | transform-origin: 50% 50%; 548 | transform-box: fill-box; 549 | -webkit-transform: translate(0px, 0px); 550 | transform: translate(0px, 0px); } 551 | 552 | #intelligo-logo-center-a_HJa6FT1bm { 553 | -webkit-transform-origin: 50% 50%; 554 | transform-origin: 50% 50%; 555 | transform-box: fill-box; 556 | -webkit-transform: rotate(0deg); 557 | transform: rotate(0deg); } 558 | 559 | #intelligo-logo-r2 { 560 | -webkit-animation-name: intelligo-logo-r2_Animation; 561 | animation-name: intelligo-logo-r2_Animation; 562 | -webkit-transform-origin: 50% 50%; 563 | transform-origin: 50% 50%; 564 | transform-box: fill-box; 565 | opacity: 1; } 566 | 567 | #intelligo-logo-center-a_HJ1b5akbQ { 568 | -webkit-transform-origin: 50% 50%; 569 | transform-origin: 50% 50%; 570 | transform-box: fill-box; 571 | -webkit-transform: translate(0px, 0px); 572 | transform: translate(0px, 0px); } 573 | 574 | #intelligo-logo-center-b_ryNOh61bX { 575 | -webkit-transform-origin: 50% 50%; 576 | transform-origin: 50% 50%; 577 | transform-box: fill-box; 578 | -webkit-transform: rotate(360deg); 579 | transform: rotate(360deg); } 580 | 581 | #intelligo-logo-bottom { 582 | fill: #afb2bc; 583 | -webkit-animation-name: intelligo-logo-bottom_Animation; 584 | animation-name: intelligo-logo-bottom_Animation; 585 | -webkit-transform-origin: 50% 50%; 586 | transform-origin: 50% 50%; 587 | transform-box: fill-box; 588 | opacity: 1; } 589 | 590 | #intelligo-logo-top { 591 | fill: #afb2bc; 592 | -webkit-animation-name: intelligo-logo-top_Animation; 593 | animation-name: intelligo-logo-top_Animation; 594 | -webkit-transform-origin: 50% 50%; 595 | transform-origin: 50% 50%; 596 | transform-box: fill-box; 597 | opacity: 1; } 598 | 599 | #intelligo-logo-r4 { 600 | -webkit-animation-name: intelligo-logo-r4_Animation; 601 | animation-name: intelligo-logo-r4_Animation; 602 | -webkit-transform-origin: 50% 50%; 603 | transform-origin: 50% 50%; 604 | transform-box: fill-box; 605 | opacity: 1; } 606 | 607 | #intelligo-logo-top_SJzqQ0kZ7 { 608 | -webkit-transform-origin: 50% 50%; 609 | transform-origin: 50% 50%; 610 | transform-box: fill-box; 611 | -webkit-transform: scale(0.5, 1); 612 | transform: scale(0.5, 1); } 613 | 614 | #intelligo-logo-r1 { 615 | -webkit-animation-name: intelligo-logo-r1_Animation; 616 | animation-name: intelligo-logo-r1_Animation; 617 | -webkit-transform-origin: 50% 50%; 618 | transform-origin: 50% 50%; 619 | transform-box: fill-box; 620 | opacity: 1; } 621 | 622 | #intelligo-logo-r3 { 623 | -webkit-animation-name: intelligo-logo-r3_Animation; 624 | animation-name: intelligo-logo-r3_Animation; 625 | -webkit-transform-origin: 50% 50%; 626 | transform-origin: 50% 50%; 627 | transform-box: fill-box; 628 | opacity: 1; } 629 | 630 | .particles-js-canvas-el { 631 | position: absolute; 632 | top: 0; } 633 | 634 | #particles-start .particles-js-canvas-el { 635 | position: absolute; 636 | z-index: -1; } 637 | 638 | #particles-end .particles-js-canvas-el { 639 | position: absolute; 640 | z-index: -1; } 641 | -------------------------------------------------------------------------------- /public/js/lib/threelib/TrackballControls.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author Eberhard Graether / http://egraether.com/ 3 | * @author Mark Lundin / http://mark-lundin.com 4 | * @author Simone Manini / http://daron1337.github.io 5 | * @author Luca Antiga / http://lantiga.github.io 6 | */ 7 | 8 | THREE.TrackballControls = function ( object, domElement ) { 9 | 10 | var _this = this; 11 | var STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 }; 12 | 13 | this.object = object; 14 | this.domElement = ( domElement !== undefined ) ? domElement : document; 15 | 16 | // API 17 | 18 | this.enabled = true; 19 | 20 | this.screen = { left: 0, top: 0, width: 0, height: 0 }; 21 | 22 | this.rotateSpeed = 1.0; 23 | this.zoomSpeed = 1.2; 24 | this.panSpeed = 0.3; 25 | 26 | this.noRotate = false; 27 | this.noZoom = false; 28 | this.noPan = false; 29 | 30 | this.staticMoving = false; 31 | this.dynamicDampingFactor = 0.2; 32 | 33 | this.minDistance = 0; 34 | this.maxDistance = Infinity; 35 | 36 | this.keys = [ 65 /*A*/, 83 /*S*/, 68 /*D*/ ]; 37 | 38 | // internals 39 | 40 | this.target = new THREE.Vector3(); 41 | 42 | var EPS = 0.000001; 43 | 44 | var lastPosition = new THREE.Vector3(); 45 | 46 | var _state = STATE.NONE, 47 | _prevState = STATE.NONE, 48 | 49 | _eye = new THREE.Vector3(), 50 | 51 | _movePrev = new THREE.Vector2(), 52 | _moveCurr = new THREE.Vector2(), 53 | 54 | _lastAxis = new THREE.Vector3(), 55 | _lastAngle = 0, 56 | 57 | _zoomStart = new THREE.Vector2(), 58 | _zoomEnd = new THREE.Vector2(), 59 | 60 | _touchZoomDistanceStart = 0, 61 | _touchZoomDistanceEnd = 0, 62 | 63 | _panStart = new THREE.Vector2(), 64 | _panEnd = new THREE.Vector2(); 65 | 66 | // for reset 67 | 68 | this.target0 = this.target.clone(); 69 | this.position0 = this.object.position.clone(); 70 | this.up0 = this.object.up.clone(); 71 | 72 | // events 73 | 74 | var changeEvent = { type: 'change' }; 75 | var startEvent = { type: 'start' }; 76 | var endEvent = { type: 'end' }; 77 | 78 | 79 | // methods 80 | 81 | this.handleResize = function () { 82 | 83 | if ( this.domElement === document ) { 84 | 85 | this.screen.left = 0; 86 | this.screen.top = 0; 87 | this.screen.width = window.innerWidth; 88 | this.screen.height = window.innerHeight; 89 | 90 | } else { 91 | 92 | var box = this.domElement.getBoundingClientRect(); 93 | // adjustments come from similar code in the jquery offset() function 94 | var d = this.domElement.ownerDocument.documentElement; 95 | this.screen.left = box.left + window.pageXOffset - d.clientLeft; 96 | this.screen.top = box.top + window.pageYOffset - d.clientTop; 97 | this.screen.width = box.width; 98 | this.screen.height = box.height; 99 | 100 | } 101 | 102 | }; 103 | 104 | this.handleEvent = function ( event ) { 105 | 106 | if ( typeof this[ event.type ] == 'function' ) { 107 | 108 | this[ event.type ]( event ); 109 | 110 | } 111 | 112 | }; 113 | 114 | var getMouseOnScreen = ( function () { 115 | 116 | var vector = new THREE.Vector2(); 117 | 118 | return function getMouseOnScreen( pageX, pageY ) { 119 | 120 | vector.set( 121 | ( pageX - _this.screen.left ) / _this.screen.width, 122 | ( pageY - _this.screen.top ) / _this.screen.height 123 | ); 124 | 125 | return vector; 126 | 127 | }; 128 | 129 | }() ); 130 | 131 | var getMouseOnCircle = ( function () { 132 | 133 | var vector = new THREE.Vector2(); 134 | 135 | return function getMouseOnCircle( pageX, pageY ) { 136 | 137 | vector.set( 138 | ( ( pageX - _this.screen.width * 0.5 - _this.screen.left ) / ( _this.screen.width * 0.5 ) ), 139 | ( ( _this.screen.height + 2 * ( _this.screen.top - pageY ) ) / _this.screen.width ) // screen.width intentional 140 | ); 141 | 142 | return vector; 143 | 144 | }; 145 | 146 | }() ); 147 | 148 | this.rotateCamera = ( function() { 149 | 150 | var axis = new THREE.Vector3(), 151 | quaternion = new THREE.Quaternion(), 152 | eyeDirection = new THREE.Vector3(), 153 | objectUpDirection = new THREE.Vector3(), 154 | objectSidewaysDirection = new THREE.Vector3(), 155 | moveDirection = new THREE.Vector3(), 156 | angle; 157 | 158 | return function rotateCamera() { 159 | 160 | moveDirection.set( _moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0 ); 161 | angle = moveDirection.length(); 162 | 163 | if ( angle ) { 164 | 165 | _eye.copy( _this.object.position ).sub( _this.target ); 166 | 167 | eyeDirection.copy( _eye ).normalize(); 168 | objectUpDirection.copy( _this.object.up ).normalize(); 169 | objectSidewaysDirection.crossVectors( objectUpDirection, eyeDirection ).normalize(); 170 | 171 | objectUpDirection.setLength( _moveCurr.y - _movePrev.y ); 172 | objectSidewaysDirection.setLength( _moveCurr.x - _movePrev.x ); 173 | 174 | moveDirection.copy( objectUpDirection.add( objectSidewaysDirection ) ); 175 | 176 | axis.crossVectors( moveDirection, _eye ).normalize(); 177 | 178 | angle *= _this.rotateSpeed; 179 | quaternion.setFromAxisAngle( axis, angle ); 180 | 181 | _eye.applyQuaternion( quaternion ); 182 | _this.object.up.applyQuaternion( quaternion ); 183 | 184 | _lastAxis.copy( axis ); 185 | _lastAngle = angle; 186 | 187 | } else if ( ! _this.staticMoving && _lastAngle ) { 188 | 189 | _lastAngle *= Math.sqrt( 1.0 - _this.dynamicDampingFactor ); 190 | _eye.copy( _this.object.position ).sub( _this.target ); 191 | quaternion.setFromAxisAngle( _lastAxis, _lastAngle ); 192 | _eye.applyQuaternion( quaternion ); 193 | _this.object.up.applyQuaternion( quaternion ); 194 | 195 | } 196 | 197 | _movePrev.copy( _moveCurr ); 198 | 199 | }; 200 | 201 | }() ); 202 | 203 | 204 | this.zoomCamera = function () { 205 | 206 | var factor; 207 | 208 | if ( _state === STATE.TOUCH_ZOOM_PAN ) { 209 | 210 | factor = _touchZoomDistanceStart / _touchZoomDistanceEnd; 211 | _touchZoomDistanceStart = _touchZoomDistanceEnd; 212 | _eye.multiplyScalar( factor ); 213 | 214 | } else { 215 | 216 | factor = 1.0 + ( _zoomEnd.y - _zoomStart.y ) * _this.zoomSpeed; 217 | 218 | if ( factor !== 1.0 && factor > 0.0 ) { 219 | 220 | _eye.multiplyScalar( factor ); 221 | 222 | } 223 | 224 | if ( _this.staticMoving ) { 225 | 226 | _zoomStart.copy( _zoomEnd ); 227 | 228 | } else { 229 | 230 | _zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor; 231 | 232 | } 233 | 234 | } 235 | 236 | }; 237 | 238 | this.panCamera = ( function() { 239 | 240 | var mouseChange = new THREE.Vector2(), 241 | objectUp = new THREE.Vector3(), 242 | pan = new THREE.Vector3(); 243 | 244 | return function panCamera() { 245 | 246 | mouseChange.copy( _panEnd ).sub( _panStart ); 247 | 248 | if ( mouseChange.lengthSq() ) { 249 | 250 | mouseChange.multiplyScalar( _eye.length() * _this.panSpeed ); 251 | 252 | pan.copy( _eye ).cross( _this.object.up ).setLength( mouseChange.x ); 253 | pan.add( objectUp.copy( _this.object.up ).setLength( mouseChange.y ) ); 254 | 255 | _this.object.position.add( pan ); 256 | _this.target.add( pan ); 257 | 258 | if ( _this.staticMoving ) { 259 | 260 | _panStart.copy( _panEnd ); 261 | 262 | } else { 263 | 264 | _panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( _this.dynamicDampingFactor ) ); 265 | 266 | } 267 | 268 | } 269 | 270 | }; 271 | 272 | }() ); 273 | 274 | this.checkDistances = function () { 275 | 276 | if ( ! _this.noZoom || ! _this.noPan ) { 277 | 278 | if ( _eye.lengthSq() > _this.maxDistance * _this.maxDistance ) { 279 | 280 | _this.object.position.addVectors( _this.target, _eye.setLength( _this.maxDistance ) ); 281 | _zoomStart.copy( _zoomEnd ); 282 | 283 | } 284 | 285 | if ( _eye.lengthSq() < _this.minDistance * _this.minDistance ) { 286 | 287 | _this.object.position.addVectors( _this.target, _eye.setLength( _this.minDistance ) ); 288 | _zoomStart.copy( _zoomEnd ); 289 | 290 | } 291 | 292 | } 293 | 294 | }; 295 | 296 | this.update = function () { 297 | 298 | _eye.subVectors( _this.object.position, _this.target ); 299 | 300 | if ( ! _this.noRotate ) { 301 | 302 | _this.rotateCamera(); 303 | 304 | } 305 | 306 | if ( ! _this.noZoom ) { 307 | 308 | _this.zoomCamera(); 309 | 310 | } 311 | 312 | if ( ! _this.noPan ) { 313 | 314 | _this.panCamera(); 315 | 316 | } 317 | 318 | _this.object.position.addVectors( _this.target, _eye ); 319 | 320 | _this.checkDistances(); 321 | 322 | _this.object.lookAt( _this.target ); 323 | 324 | if ( lastPosition.distanceToSquared( _this.object.position ) > EPS ) { 325 | 326 | _this.dispatchEvent( changeEvent ); 327 | 328 | lastPosition.copy( _this.object.position ); 329 | 330 | } 331 | 332 | }; 333 | 334 | this.reset = function () { 335 | 336 | _state = STATE.NONE; 337 | _prevState = STATE.NONE; 338 | 339 | _this.target.copy( _this.target0 ); 340 | _this.object.position.copy( _this.position0 ); 341 | _this.object.up.copy( _this.up0 ); 342 | 343 | _eye.subVectors( _this.object.position, _this.target ); 344 | 345 | _this.object.lookAt( _this.target ); 346 | 347 | _this.dispatchEvent( changeEvent ); 348 | 349 | lastPosition.copy( _this.object.position ); 350 | 351 | }; 352 | 353 | // listeners 354 | 355 | function keydown( event ) { 356 | 357 | if ( _this.enabled === false ) return; 358 | 359 | window.removeEventListener( 'keydown', keydown ); 360 | 361 | _prevState = _state; 362 | 363 | if ( _state !== STATE.NONE ) { 364 | 365 | return; 366 | 367 | } else if ( event.keyCode === _this.keys[ STATE.ROTATE ] && ! _this.noRotate ) { 368 | 369 | _state = STATE.ROTATE; 370 | 371 | } else if ( event.keyCode === _this.keys[ STATE.ZOOM ] && ! _this.noZoom ) { 372 | 373 | _state = STATE.ZOOM; 374 | 375 | } else if ( event.keyCode === _this.keys[ STATE.PAN ] && ! _this.noPan ) { 376 | 377 | _state = STATE.PAN; 378 | 379 | } 380 | 381 | } 382 | 383 | function keyup( event ) { 384 | 385 | if ( _this.enabled === false ) return; 386 | 387 | _state = _prevState; 388 | 389 | window.addEventListener( 'keydown', keydown, false ); 390 | 391 | } 392 | 393 | function mousedown( event ) { 394 | 395 | if ( _this.enabled === false ) return; 396 | 397 | event.preventDefault(); 398 | event.stopPropagation(); 399 | 400 | if ( _state === STATE.NONE ) { 401 | 402 | _state = event.button; 403 | 404 | } 405 | 406 | if ( _state === STATE.ROTATE && ! _this.noRotate ) { 407 | 408 | _moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) ); 409 | _movePrev.copy( _moveCurr ); 410 | 411 | } else if ( _state === STATE.ZOOM && ! _this.noZoom ) { 412 | 413 | _zoomStart.copy( getMouseOnScreen( event.pageX, event.pageY ) ); 414 | _zoomEnd.copy( _zoomStart ); 415 | 416 | } else if ( _state === STATE.PAN && ! _this.noPan ) { 417 | 418 | _panStart.copy( getMouseOnScreen( event.pageX, event.pageY ) ); 419 | _panEnd.copy( _panStart ); 420 | 421 | } 422 | 423 | document.addEventListener( 'mousemove', mousemove, false ); 424 | document.addEventListener( 'mouseup', mouseup, false ); 425 | 426 | _this.dispatchEvent( startEvent ); 427 | 428 | } 429 | 430 | function mousemove( event ) { 431 | 432 | if ( _this.enabled === false ) return; 433 | 434 | event.preventDefault(); 435 | event.stopPropagation(); 436 | 437 | if ( _state === STATE.ROTATE && ! _this.noRotate ) { 438 | 439 | _movePrev.copy( _moveCurr ); 440 | _moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) ); 441 | 442 | } else if ( _state === STATE.ZOOM && ! _this.noZoom ) { 443 | 444 | _zoomEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) ); 445 | 446 | } else if ( _state === STATE.PAN && ! _this.noPan ) { 447 | 448 | _panEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) ); 449 | 450 | } 451 | 452 | } 453 | 454 | function mouseup( event ) { 455 | 456 | if ( _this.enabled === false ) return; 457 | 458 | event.preventDefault(); 459 | event.stopPropagation(); 460 | 461 | _state = STATE.NONE; 462 | 463 | document.removeEventListener( 'mousemove', mousemove ); 464 | document.removeEventListener( 'mouseup', mouseup ); 465 | _this.dispatchEvent( endEvent ); 466 | 467 | } 468 | 469 | function mousewheel( event ) { 470 | 471 | if ( _this.enabled === false ) return; 472 | 473 | event.preventDefault(); 474 | event.stopPropagation(); 475 | 476 | switch ( event.deltaMode ) { 477 | 478 | case 2: 479 | // Zoom in pages 480 | _zoomStart.y -= event.deltaY * 0.025; 481 | break; 482 | 483 | case 1: 484 | // Zoom in lines 485 | _zoomStart.y -= event.deltaY * 0.01; 486 | break; 487 | 488 | default: 489 | // undefined, 0, assume pixels 490 | _zoomStart.y -= event.deltaY * 0.00025; 491 | break; 492 | 493 | } 494 | 495 | _this.dispatchEvent( startEvent ); 496 | _this.dispatchEvent( endEvent ); 497 | 498 | } 499 | 500 | function touchstart( event ) { 501 | 502 | if ( _this.enabled === false ) return; 503 | 504 | switch ( event.touches.length ) { 505 | 506 | case 1: 507 | _state = STATE.TOUCH_ROTATE; 508 | _moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) ); 509 | _movePrev.copy( _moveCurr ); 510 | break; 511 | 512 | default: // 2 or more 513 | _state = STATE.TOUCH_ZOOM_PAN; 514 | var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; 515 | var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; 516 | _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy ); 517 | 518 | var x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2; 519 | var y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2; 520 | _panStart.copy( getMouseOnScreen( x, y ) ); 521 | _panEnd.copy( _panStart ); 522 | break; 523 | 524 | } 525 | 526 | _this.dispatchEvent( startEvent ); 527 | 528 | } 529 | 530 | function touchmove( event ) { 531 | 532 | if ( _this.enabled === false ) return; 533 | 534 | event.preventDefault(); 535 | event.stopPropagation(); 536 | 537 | switch ( event.touches.length ) { 538 | 539 | case 1: 540 | _movePrev.copy( _moveCurr ); 541 | _moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) ); 542 | break; 543 | 544 | default: // 2 or more 545 | var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; 546 | var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; 547 | _touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy ); 548 | 549 | var x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2; 550 | var y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2; 551 | _panEnd.copy( getMouseOnScreen( x, y ) ); 552 | break; 553 | 554 | } 555 | 556 | } 557 | 558 | function touchend( event ) { 559 | 560 | if ( _this.enabled === false ) return; 561 | 562 | switch ( event.touches.length ) { 563 | 564 | case 0: 565 | _state = STATE.NONE; 566 | break; 567 | 568 | case 1: 569 | _state = STATE.TOUCH_ROTATE; 570 | _moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) ); 571 | _movePrev.copy( _moveCurr ); 572 | break; 573 | 574 | } 575 | 576 | _this.dispatchEvent( endEvent ); 577 | 578 | } 579 | 580 | function contextmenu( event ) { 581 | 582 | if ( _this.enabled === false ) return; 583 | 584 | event.preventDefault(); 585 | 586 | } 587 | 588 | this.dispose = function() { 589 | 590 | this.domElement.removeEventListener( 'contextmenu', contextmenu, false ); 591 | this.domElement.removeEventListener( 'mousedown', mousedown, false ); 592 | this.domElement.removeEventListener( 'wheel', mousewheel, false ); 593 | 594 | this.domElement.removeEventListener( 'touchstart', touchstart, false ); 595 | this.domElement.removeEventListener( 'touchend', touchend, false ); 596 | this.domElement.removeEventListener( 'touchmove', touchmove, false ); 597 | 598 | document.removeEventListener( 'mousemove', mousemove, false ); 599 | document.removeEventListener( 'mouseup', mouseup, false ); 600 | 601 | window.removeEventListener( 'keydown', keydown, false ); 602 | window.removeEventListener( 'keyup', keyup, false ); 603 | 604 | }; 605 | 606 | this.domElement.addEventListener( 'contextmenu', contextmenu, false ); 607 | this.domElement.addEventListener( 'mousedown', mousedown, false ); 608 | this.domElement.addEventListener( 'wheel', mousewheel, false ); 609 | 610 | this.domElement.addEventListener( 'touchstart', touchstart, false ); 611 | this.domElement.addEventListener( 'touchend', touchend, false ); 612 | this.domElement.addEventListener( 'touchmove', touchmove, false ); 613 | 614 | window.addEventListener( 'keydown', keydown, false ); 615 | window.addEventListener( 'keyup', keyup, false ); 616 | 617 | this.handleResize(); 618 | 619 | // force an update at start 620 | this.update(); 621 | 622 | }; 623 | 624 | THREE.TrackballControls.prototype = Object.create( THREE.EventDispatcher.prototype ); 625 | THREE.TrackballControls.prototype.constructor = THREE.TrackballControls; 626 | -------------------------------------------------------------------------------- /public/js/lib/tracking-min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * tracking - A modern approach for Computer Vision on the web. 3 | * @author Eduardo Lundgren 4 | * @version v1.1.2 5 | * @link http://trackingjs.com 6 | * @license BSD 7 | */ 8 | !function(t,r){t.tracking=t.tracking||{},tracking.inherits=function(t,r){function n(){}n.prototype=r.prototype,t.superClass_=r.prototype,t.prototype=new n,t.prototype.constructor=t,t.base=function(t,n){var e=Array.prototype.slice.call(arguments,2);return r.prototype[n].apply(t,e)}},tracking.initUserMedia_=function(r,n){t.navigator.getUserMedia({video:!0,audio:!(!n||!n.audio)},function(n){try{r.src=t.URL.createObjectURL(n)}catch(e){r.src=n}},function(){throw Error("Cannot capture user camera.")})},tracking.isNode=function(t){return t.nodeType||this.isWindow(t)},tracking.isWindow=function(t){return!!(t&&t.alert&&t.document)},tracking.one=function(t,r){return this.isNode(t)?t:(r||document).querySelector(t)},tracking.track=function(t,r,n){if(t=tracking.one(t),!t)throw new Error("Element not found, try a different element or selector.");if(!r)throw new Error("Tracker not specified, try `tracking.track(element, new tracking.FaceTracker())`.");switch(t.nodeName.toLowerCase()){case"canvas":return this.trackCanvas_(t,r,n);case"img":return this.trackImg_(t,r,n);case"video":return n&&n.camera&&this.initUserMedia_(t,n),this.trackVideo_(t,r,n);default:throw new Error("Element not supported, try in a canvas, img, or video.")}},tracking.trackCanvas_=function(t,r){var n=this,e=new tracking.TrackerTask(r);return e.on("run",function(){n.trackCanvasInternal_(t,r)}),e.run()},tracking.trackCanvasInternal_=function(t,r){var n=t.width,e=t.height,i=t.getContext("2d"),a=i.getImageData(0,0,n,e);r.track(a.data,n,e)},tracking.trackImg_=function(t,r){var n=t.width,e=t.height,i=document.createElement("canvas");i.width=n,i.height=e;var a=new tracking.TrackerTask(r);return a.on("run",function(){tracking.Canvas.loadImage(i,t.src,0,0,n,e,function(){tracking.trackCanvasInternal_(i,r)})}),a.run()},tracking.trackVideo_=function(r,n){var e,i,a=document.createElement("canvas"),o=a.getContext("2d"),c=function(){e=r.offsetWidth,i=r.offsetHeight,a.width=e,a.height=i};c(),r.addEventListener("resize",c);var s,g=function(){s=t.requestAnimationFrame(function(){if(r.readyState===r.HAVE_ENOUGH_DATA){try{o.drawImage(r,0,0,e,i)}catch(t){}tracking.trackCanvasInternal_(a,n)}g()})},h=new tracking.TrackerTask(n);return h.on("stop",function(){t.cancelAnimationFrame(s)}),h.on("run",function(){g()}),h.run()},t.URL||(t.URL=t.URL||t.webkitURL||t.msURL||t.oURL),navigator.getUserMedia||(navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia)}(window),function(){tracking.EventEmitter=function(){},tracking.EventEmitter.prototype.events_=null,tracking.EventEmitter.prototype.addListener=function(t,r){if("function"!=typeof r)throw new TypeError("Listener must be a function");return this.events_||(this.events_={}),this.emit("newListener",t,r),this.events_[t]||(this.events_[t]=[]),this.events_[t].push(r),this},tracking.EventEmitter.prototype.listeners=function(t){return this.events_&&this.events_[t]},tracking.EventEmitter.prototype.emit=function(t){var r=this.listeners(t);if(r){for(var n=Array.prototype.slice.call(arguments,1),e=0;ee)return this;n.splice(e,1)}return this},tracking.EventEmitter.prototype.setMaxListeners=function(){throw new Error("Not implemented")}}(),function(){tracking.Canvas={},tracking.Canvas.loadImage=function(t,r,n,e,i,a,o){var c=this,s=new window.Image;s.crossOrigin="*",s.onload=function(){var r=t.getContext("2d");t.width=i,t.height=a,r.drawImage(s,n,e,i,a),o&&o.call(c),s=null},s.src=r}}(),function(){tracking.DisjointSet=function(t){if(void 0===t)throw new Error("DisjointSet length not specified.");this.length=t,this.parent=new Uint32Array(t);for(var r=0;t>r;r++)this.parent[r]=r},tracking.DisjointSet.prototype.length=null,tracking.DisjointSet.prototype.parent=null,tracking.DisjointSet.prototype.find=function(t){return this.parent[t]===t?t:this.parent[t]=this.find(this.parent[t])},tracking.DisjointSet.prototype.union=function(t,r){var n=this.find(t),e=this.find(r);this.parent[n]=e}}(),function(){tracking.Image={},tracking.Image.blur=function(t,r,n,e){if(e=Math.abs(e),1>=e)throw new Error("Diameter should be greater than 1.");for(var i=e/2,a=Math.ceil(e)+(1-Math.ceil(e)%2),o=new Float32Array(a),c=(i+.5)/3,s=c*c,g=1/Math.sqrt(2*Math.PI*s),h=-1/(2*c*c),k=0,u=Math.floor(a/2),f=0;a>f;f++){var l=f-u,p=g*Math.exp(l*l*h);o[f]=p,k+=p}for(var v=0;vs;s++)for(var g=0;r>g;g++){var h=s*r*4+4*g,k=~~(.299*t[h]+.587*t[h+1]+.114*t[h+2]);if(e&&this.computePixelValueSAT_(e,r,s,g,k),i&&this.computePixelValueSAT_(i,r,s,g,k*k),a){var u=h-4*r,f=~~(.299*t[u]+.587*t[u+1]+.114*t[u+2]);this.computePixelValueRSAT_(a,r,s,g,k,f||0)}o&&this.computePixelValueSAT_(o,r,s,g,c[h])}},tracking.Image.computePixelValueRSAT_=function(t,r,n,e,i,a){var o=n*r+e;t[o]=(t[o-r-1]||0)+(t[o-r+1]||0)-(t[o-r-r]||0)+i+a},tracking.Image.computePixelValueSAT_=function(t,r,n,e,i){var a=n*r+e;t[a]=(t[a-r]||0)+(t[a-1]||0)+i-(t[a-r-1]||0)},tracking.Image.grayscale=function(t,r,n,e){for(var i=new Uint8ClampedArray(e?t.length:t.length>>2),a=0,o=0,c=0;n>c;c++)for(var s=0;r>s;s++){var g=.299*t[o]+.587*t[o+1]+.114*t[o+2];i[a++]=g,e&&(i[a++]=g,i[a++]=g,i[a++]=t[o+3]),o+=4}return i},tracking.Image.horizontalConvolve=function(t,r,n,e,i){for(var a=e.length,o=Math.floor(a/2),c=new Float32Array(r*n*4),s=i?1:0,g=0;n>g;g++)for(var h=0;r>h;h++){for(var k=g,u=h,f=4*(g*r+h),l=0,p=0,v=0,m=0,y=0;a>y;y++){var d=k,w=Math.min(r-1,Math.max(0,u+y-o)),T=4*(d*r+w),C=e[y];l+=t[T]*C,p+=t[T+1]*C,v+=t[T+2]*C,m+=t[T+3]*C}c[f]=l,c[f+1]=p,c[f+2]=v,c[f+3]=m+s*(255-m)}return c},tracking.Image.verticalConvolve=function(t,r,n,e,i){for(var a=e.length,o=Math.floor(a/2),c=new Float32Array(r*n*4),s=i?1:0,g=0;n>g;g++)for(var h=0;r>h;h++){for(var k=g,u=h,f=4*(g*r+h),l=0,p=0,v=0,m=0,y=0;a>y;y++){var d=Math.min(n-1,Math.max(0,k+y-o)),w=u,T=4*(d*r+w),C=e[y];l+=t[T]*C,p+=t[T+1]*C,v+=t[T+2]*C,m+=t[T+3]*C}c[f]=l,c[f+1]=p,c[f+2]=v,c[f+3]=m+s*(255-m)}return c},tracking.Image.separableConvolve=function(t,r,n,e,i,a){var o=this.verticalConvolve(t,r,n,i,a);return this.horizontalConvolve(o,r,n,e,a)},tracking.Image.sobel=function(t,r,n){t=this.grayscale(t,r,n,!0);for(var e=new Float32Array(r*n*4),i=new Float32Array([-1,0,1]),a=new Float32Array([1,2,1]),o=this.separableConvolve(t,r,n,i,a),c=this.separableConvolve(t,r,n,a,i),s=0;s0&&(s=new Int32Array(r*n)),tracking.Image.computeIntegralImage(t,r,n,k,u,f,s);for(var l=c[0],p=c[1],v=e*i,m=v*l|0,y=v*p|0;r>m&&n>y;){for(var d=v*a+.5|0,w=0;n-y>w;w+=d)for(var T=0;r-m>T;T+=d)o>0&&this.isTriviallyExcluded(o,s,w,T,r,m,y)||this.evalStages_(c,k,u,f,w,T,r,m,y,v)&&(h[g++]={width:m,height:y,x:T,y:w});v*=i,m=v*l|0,y=v*p|0}return this.mergeRectangles_(h)},tracking.ViolaJones.isTriviallyExcluded=function(t,r,n,e,i,a,o){var c=n*i+e,s=c+a,g=c+o*i,h=g+a,k=(r[c]-r[s]-r[g]+r[h])/(a*o*255);return t>k?!0:!1},tracking.ViolaJones.evalStages_=function(t,r,n,e,i,a,o,c,s,g){var h=1/(c*s),k=i*o+a,u=k+c,f=k+s*o,l=f+c,p=(r[k]-r[u]-r[f]+r[l])*h,v=(n[k]-n[u]-n[f]+n[l])*h-p*p,m=1;v>0&&(m=Math.sqrt(v));for(var y=t.length,d=2;y>d;){for(var w=0,T=t[d++],C=t[d++];C--;){for(var _=0,E=t[d++],M=t[d++],x=0;M>x;x++){var I,b,O,A,S=a+t[d++]*g+.5|0,D=i+t[d++]*g+.5|0,R=t[d++]*g+.5|0,j=t[d++]*g+.5|0,F=t[d++];E?(I=S-j+R+(D+R+j-1)*o,b=S+(D-1)*o,O=S-j+(D+j-1)*o,A=S+R+(D+R-1)*o,_+=(e[I]+e[b]-e[O]-e[A])*F):(I=D*o+S,b=I+R,O=I+j*o,A=O+R,_+=(r[I]-r[b]-r[O]+r[A])*F)}var L=t[d++],V=t[d++],U=t[d++];w+=L*m>_*h?V:U}if(T>w)return!1}return!0},tracking.ViolaJones.mergeRectangles_=function(t){for(var r=new tracking.DisjointSet(t.length),n=0;n=this.REGIONS_OVERLAP&&h/(u*(k/u))>=this.REGIONS_OVERLAP&&r.union(n,i)}}for(var f={},l=0;l>1)*(this.N>>5)),i=0,a=this.getRandomOffsets_(r),o=0,c=0;ch;h++)t[a[g++]+s]>1,a=n.length>>1,o=new Array(i),c=0;i>c;c++){for(var s=1/0,g=0,h=0;a>h;h++){for(var k=0,u=0,f=this.N>>5;f>u;u++)k+=tracking.Math.hammingWeight(r[c*f+u]^e[h*f+u]);s>k&&(s=k,g=h)}o[c]={index1:c,index2:g,keypoint1:[t[2*c],t[2*c+1]],keypoint2:[n[2*g],n[2*g+1]],confidence:1-s/this.N}}return o},tracking.Brief.reciprocalMatch=function(t,r,n,e){var i=[];if(0===t.length||0===n.length)return i;for(var a=tracking.Brief.match(t,r,n,e),o=tracking.Brief.match(n,e,t,r),c=0;cc;c++)for(var s=3;r-3>s;s++){for(var g=c*r+s,h=t[g],k=0;16>k;k++)a[k]=t[g+i[k]];this.isCorner(h,a,e)&&(o.push(s,c),s+=3)}return o},tracking.Fast.isBrighter=function(t,r,n){return t-r>n},tracking.Fast.isCorner=function(t,r,n){if(this.isTriviallyExcluded(r,t,n))return!1;for(var e=0;16>e;e++){for(var i=!0,a=!0,o=0;9>o;o++){var c=r[e+o&15];if(!this.isBrighter(t,c,n)&&(a=!1,i===!1))break;if(!this.isDarker(t,c,n)&&(i=!1,a===!1))break}if(a||i)return!0}return!1},tracking.Fast.isDarker=function(t,r,n){return r-t>n},tracking.Fast.isTriviallyExcluded=function(t,r,n){var e=0,i=t[8],a=t[12],o=t[4],c=t[0];return this.isBrighter(c,r,n)&&e++,this.isBrighter(o,r,n)&&e++,this.isBrighter(i,r,n)&&e++,this.isBrighter(a,r,n)&&e++,3>e&&(e=0,this.isDarker(c,r,n)&&e++,this.isDarker(o,r,n)&&e++,this.isDarker(i,r,n)&&e++,this.isDarker(a,r,n)&&e++,3>e)?!0:!1},tracking.Fast.getCircleOffsets_=function(t){if(this.circles_[t])return this.circles_[t];var r=new Int32Array(16);return r[0]=-t-t-t,r[1]=r[0]+1,r[2]=r[1]+t+1,r[3]=r[2]+t+1,r[4]=r[3]+t,r[5]=r[4]+t,r[6]=r[5]+t-1,r[7]=r[6]+t-1,r[8]=r[7]-1,r[9]=r[8]-1,r[10]=r[9]-t-1,r[11]=r[10]-t-1,r[12]=r[11]-t,r[13]=r[12]-t,r[14]=r[13]-t+1,r[15]=r[14]-t+1,this.circles_[t]=r,r}}(),function(){tracking.Math={},tracking.Math.distance=function(t,r,n,e){var i=n-t,a=e-r;return Math.sqrt(i*i+a*a)},tracking.Math.hammingWeight=function(t){return t-=t>>1&1431655765,t=(858993459&t)+(t>>2&858993459),16843009*(t+(t>>4)&252645135)>>24},tracking.Math.uniformRandom=function(t,r){return t+Math.random()*(r-t)},tracking.Math.intersectRect=function(t,r,n,e,i,a,o,c){return!(i>n||t>o||a>e||r>c)}}(),function(){tracking.Matrix={},tracking.Matrix.forEach=function(t,r,n,e,i){i=i||1;for(var a=0;n>a;a+=i)for(var o=0;r>o;o+=i){var c=a*r*4+4*o;e.call(this,t[c],t[c+1],t[c+2],t[c+3],c,a,o)}}}(),function(){tracking.EPnP={},tracking.EPnP.solve=function(t,r,n){}}(),function(){tracking.Tracker=function(){tracking.Tracker.base(this,"constructor")},tracking.inherits(tracking.Tracker,tracking.EventEmitter),tracking.Tracker.prototype.track=function(){}}(),function(){tracking.TrackerTask=function(t){if(tracking.TrackerTask.base(this,"constructor"),!t)throw new Error("Tracker instance not specified.");this.setTracker(t)},tracking.inherits(tracking.TrackerTask,tracking.EventEmitter),tracking.TrackerTask.prototype.tracker_=null,tracking.TrackerTask.prototype.running_=!1,tracking.TrackerTask.prototype.getTracker=function(){return this.tracker_},tracking.TrackerTask.prototype.inRunning=function(){return this.running_},tracking.TrackerTask.prototype.setRunning=function(t){this.running_=t},tracking.TrackerTask.prototype.setTracker=function(t){this.tracker_=t},tracking.TrackerTask.prototype.run=function(){var t=this;if(!this.inRunning())return this.setRunning(!0),this.reemitTrackEvent_=function(r){t.emit("track",r)},this.tracker_.on("track",this.reemitTrackEvent_),this.emit("run"),this},tracking.TrackerTask.prototype.stop=function(){return this.inRunning()?(this.setRunning(!1),this.emit("stop"),this.tracker_.removeListener("track",this.reemitTrackEvent_),this):void 0}}(),function(){tracking.ColorTracker=function(t){tracking.ColorTracker.base(this,"constructor"),"string"==typeof t&&(t=[t]),t&&(t.forEach(function(t){if(!tracking.ColorTracker.getColor(t))throw new Error('Color not valid, try `new tracking.ColorTracker("magenta")`.')}),this.setColors(t))},tracking.inherits(tracking.ColorTracker,tracking.Tracker),tracking.ColorTracker.knownColors_={},tracking.ColorTracker.neighbours_={},tracking.ColorTracker.registerColor=function(t,r){tracking.ColorTracker.knownColors_[t]=r},tracking.ColorTracker.getColor=function(t){return tracking.ColorTracker.knownColors_[t]},tracking.ColorTracker.prototype.colors=["magenta"],tracking.ColorTracker.prototype.minDimension=20,tracking.ColorTracker.prototype.maxDimension=1/0,tracking.ColorTracker.prototype.minGroupSize=30,tracking.ColorTracker.prototype.calculateDimensions_=function(t,r){for(var n=-1,e=-1,i=1/0,a=1/0,o=0;r>o;o+=2){var c=t[o],s=t[o+1];i>c&&(i=c),c>n&&(n=c),a>s&&(a=s),s>e&&(e=s)}return{width:n-i,height:e-a,x:i,y:a}},tracking.ColorTracker.prototype.getColors=function(){return this.colors},tracking.ColorTracker.prototype.getMinDimension=function(){return this.minDimension},tracking.ColorTracker.prototype.getMaxDimension=function(){return this.maxDimension},tracking.ColorTracker.prototype.getMinGroupSize=function(){return this.minGroupSize},tracking.ColorTracker.prototype.getNeighboursForWidth_=function(t){if(tracking.ColorTracker.neighbours_[t])return tracking.ColorTracker.neighbours_[t];var r=new Int32Array(8);return r[0]=4*-t,r[1]=4*-t+4,r[2]=4,r[3]=4*t+4,r[4]=4*t,r[5]=4*t-4,r[6]=-4,r[7]=4*-t-4,tracking.ColorTracker.neighbours_[t]=r,r},tracking.ColorTracker.prototype.mergeRectangles_=function(t){for(var r,n=[],e=this.getMinDimension(),i=this.getMaxDimension(),a=0;a=e&&o.height>=e&&o.width<=i&&o.height<=i&&n.push(o)}return n},tracking.ColorTracker.prototype.setColors=function(t){this.colors=t},tracking.ColorTracker.prototype.setMinDimension=function(t){this.minDimension=t},tracking.ColorTracker.prototype.setMaxDimension=function(t){this.maxDimension=t},tracking.ColorTracker.prototype.setMinGroupSize=function(t){this.minGroupSize=t},tracking.ColorTracker.prototype.track=function(t,r,n){var e=this,i=this.getColors();if(!i)throw new Error('Colors not specified, try `new tracking.ColorTracker("magenta")`.');var a=[];i.forEach(function(i){a=a.concat(e.trackColor_(t,r,n,i))}),this.emit("track",{data:a})},tracking.ColorTracker.prototype.trackColor_=function(n,e,i,a){var o,c,s,g,h,k=tracking.ColorTracker.knownColors_[a],u=new Int32Array(n.length>>2),f=new Int8Array(n.length),l=this.getMinGroupSize(),p=this.getNeighboursForWidth_(e),v=new Int32Array(n.length),m=[],y=-4;if(!k)return m;for(var d=0;i>d;d++)for(var w=0;e>w;w++)if(y+=4,!f[y]){for(o=0,h=-1,v[++h]=y,v[++h]=d,v[++h]=w,f[y]=1;h>=0;)if(s=v[h--],c=v[h--],g=v[h--],k(n[g],n[g+1],n[g+2],n[g+3],g,c,s)){u[o++]=s,u[o++]=c;for(var T=0;T=0&&i>_&&E>=0&&e>E&&(v[++h]=C,v[++h]=_,v[++h]=E,f[C]=1)}}if(o>=l){var M=this.calculateDimensions_(u,o);M&&(M.color=a,m.push(M))}}return this.mergeRectangles_(m)},tracking.ColorTracker.registerColor("cyan",function(t,r,n){var e=50,i=70,a=t-0,o=r-255,c=n-255;return r-t>=e&&n-t>=i?!0:6400>a*a+o*o+c*c}),tracking.ColorTracker.registerColor("magenta",function(t,r,n){var e=50,i=t-255,a=r-0,o=n-255;return t-r>=e&&n-r>=e?!0:19600>i*i+a*a+o*o}),tracking.ColorTracker.registerColor("yellow",function(t,r,n){var e=50,i=t-255,a=r-255,o=n-0;return t-n>=e&&r-n>=e?!0:1e4>i*i+a*a+o*o});var t=new Int32Array([-1,-1,0,1,1,1,0,-1]),r=new Int32Array([0,1,1,1,0,-1,-1,-1])}(),function(){tracking.ObjectTracker=function(t){tracking.ObjectTracker.base(this,"constructor"),t&&(Array.isArray(t)||(t=[t]),Array.isArray(t)&&t.forEach(function(r,n){if("string"==typeof r&&(t[n]=tracking.ViolaJones.classifiers[r]),!t[n])throw new Error('Object classifier not valid, try `new tracking.ObjectTracker("face")`.')})),this.setClassifiers(t)},tracking.inherits(tracking.ObjectTracker,tracking.Tracker),tracking.ObjectTracker.prototype.edgesDensity=.2,tracking.ObjectTracker.prototype.initialScale=1,tracking.ObjectTracker.prototype.scaleFactor=1.25,tracking.ObjectTracker.prototype.stepSize=1.5,tracking.ObjectTracker.prototype.getClassifiers=function(){return this.classifiers},tracking.ObjectTracker.prototype.getEdgesDensity=function(){return this.edgesDensity},tracking.ObjectTracker.prototype.getInitialScale=function(){return this.initialScale},tracking.ObjectTracker.prototype.getScaleFactor=function(){return this.scaleFactor},tracking.ObjectTracker.prototype.getStepSize=function(){return this.stepSize},tracking.ObjectTracker.prototype.track=function(t,r,n){var e=this,i=this.getClassifiers();if(!i)throw new Error('Object classifier not specified, try `new tracking.ObjectTracker("face")`.');var a=[];i.forEach(function(i){a=a.concat(tracking.ViolaJones.detect(t,r,n,e.getInitialScale(),e.getScaleFactor(),e.getStepSize(),e.getEdgesDensity(),i))}),this.emit("track",{data:a})},tracking.ObjectTracker.prototype.setClassifiers=function(t){this.classifiers=t},tracking.ObjectTracker.prototype.setEdgesDensity=function(t){this.edgesDensity=t},tracking.ObjectTracker.prototype.setInitialScale=function(t){this.initialScale=t},tracking.ObjectTracker.prototype.setScaleFactor=function(t){this.scaleFactor=t},tracking.ObjectTracker.prototype.setStepSize=function(t){this.stepSize=t}}(); -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/less/variables.less: -------------------------------------------------------------------------------- 1 | // Variables 2 | // -------------------------- 3 | 4 | @fa-font-path: "../fonts"; 5 | @fa-font-size-base: 14px; 6 | @fa-line-height-base: 1; 7 | //@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts"; // for referencing Bootstrap CDN font files directly 8 | @fa-css-prefix: fa; 9 | @fa-version: "4.7.0"; 10 | @fa-border-color: #eee; 11 | @fa-inverse: #fff; 12 | @fa-li-width: (30em / 14); 13 | 14 | @fa-var-500px: "\f26e"; 15 | @fa-var-address-book: "\f2b9"; 16 | @fa-var-address-book-o: "\f2ba"; 17 | @fa-var-address-card: "\f2bb"; 18 | @fa-var-address-card-o: "\f2bc"; 19 | @fa-var-adjust: "\f042"; 20 | @fa-var-adn: "\f170"; 21 | @fa-var-align-center: "\f037"; 22 | @fa-var-align-justify: "\f039"; 23 | @fa-var-align-left: "\f036"; 24 | @fa-var-align-right: "\f038"; 25 | @fa-var-amazon: "\f270"; 26 | @fa-var-ambulance: "\f0f9"; 27 | @fa-var-american-sign-language-interpreting: "\f2a3"; 28 | @fa-var-anchor: "\f13d"; 29 | @fa-var-android: "\f17b"; 30 | @fa-var-angellist: "\f209"; 31 | @fa-var-angle-double-down: "\f103"; 32 | @fa-var-angle-double-left: "\f100"; 33 | @fa-var-angle-double-right: "\f101"; 34 | @fa-var-angle-double-up: "\f102"; 35 | @fa-var-angle-down: "\f107"; 36 | @fa-var-angle-left: "\f104"; 37 | @fa-var-angle-right: "\f105"; 38 | @fa-var-angle-up: "\f106"; 39 | @fa-var-apple: "\f179"; 40 | @fa-var-archive: "\f187"; 41 | @fa-var-area-chart: "\f1fe"; 42 | @fa-var-arrow-circle-down: "\f0ab"; 43 | @fa-var-arrow-circle-left: "\f0a8"; 44 | @fa-var-arrow-circle-o-down: "\f01a"; 45 | @fa-var-arrow-circle-o-left: "\f190"; 46 | @fa-var-arrow-circle-o-right: "\f18e"; 47 | @fa-var-arrow-circle-o-up: "\f01b"; 48 | @fa-var-arrow-circle-right: "\f0a9"; 49 | @fa-var-arrow-circle-up: "\f0aa"; 50 | @fa-var-arrow-down: "\f063"; 51 | @fa-var-arrow-left: "\f060"; 52 | @fa-var-arrow-right: "\f061"; 53 | @fa-var-arrow-up: "\f062"; 54 | @fa-var-arrows: "\f047"; 55 | @fa-var-arrows-alt: "\f0b2"; 56 | @fa-var-arrows-h: "\f07e"; 57 | @fa-var-arrows-v: "\f07d"; 58 | @fa-var-asl-interpreting: "\f2a3"; 59 | @fa-var-assistive-listening-systems: "\f2a2"; 60 | @fa-var-asterisk: "\f069"; 61 | @fa-var-at: "\f1fa"; 62 | @fa-var-audio-description: "\f29e"; 63 | @fa-var-automobile: "\f1b9"; 64 | @fa-var-backward: "\f04a"; 65 | @fa-var-balance-scale: "\f24e"; 66 | @fa-var-ban: "\f05e"; 67 | @fa-var-bandcamp: "\f2d5"; 68 | @fa-var-bank: "\f19c"; 69 | @fa-var-bar-chart: "\f080"; 70 | @fa-var-bar-chart-o: "\f080"; 71 | @fa-var-barcode: "\f02a"; 72 | @fa-var-bars: "\f0c9"; 73 | @fa-var-bath: "\f2cd"; 74 | @fa-var-bathtub: "\f2cd"; 75 | @fa-var-battery: "\f240"; 76 | @fa-var-battery-0: "\f244"; 77 | @fa-var-battery-1: "\f243"; 78 | @fa-var-battery-2: "\f242"; 79 | @fa-var-battery-3: "\f241"; 80 | @fa-var-battery-4: "\f240"; 81 | @fa-var-battery-empty: "\f244"; 82 | @fa-var-battery-full: "\f240"; 83 | @fa-var-battery-half: "\f242"; 84 | @fa-var-battery-quarter: "\f243"; 85 | @fa-var-battery-three-quarters: "\f241"; 86 | @fa-var-bed: "\f236"; 87 | @fa-var-beer: "\f0fc"; 88 | @fa-var-behance: "\f1b4"; 89 | @fa-var-behance-square: "\f1b5"; 90 | @fa-var-bell: "\f0f3"; 91 | @fa-var-bell-o: "\f0a2"; 92 | @fa-var-bell-slash: "\f1f6"; 93 | @fa-var-bell-slash-o: "\f1f7"; 94 | @fa-var-bicycle: "\f206"; 95 | @fa-var-binoculars: "\f1e5"; 96 | @fa-var-birthday-cake: "\f1fd"; 97 | @fa-var-bitbucket: "\f171"; 98 | @fa-var-bitbucket-square: "\f172"; 99 | @fa-var-bitcoin: "\f15a"; 100 | @fa-var-black-tie: "\f27e"; 101 | @fa-var-blind: "\f29d"; 102 | @fa-var-bluetooth: "\f293"; 103 | @fa-var-bluetooth-b: "\f294"; 104 | @fa-var-bold: "\f032"; 105 | @fa-var-bolt: "\f0e7"; 106 | @fa-var-bomb: "\f1e2"; 107 | @fa-var-book: "\f02d"; 108 | @fa-var-bookmark: "\f02e"; 109 | @fa-var-bookmark-o: "\f097"; 110 | @fa-var-braille: "\f2a1"; 111 | @fa-var-briefcase: "\f0b1"; 112 | @fa-var-btc: "\f15a"; 113 | @fa-var-bug: "\f188"; 114 | @fa-var-building: "\f1ad"; 115 | @fa-var-building-o: "\f0f7"; 116 | @fa-var-bullhorn: "\f0a1"; 117 | @fa-var-bullseye: "\f140"; 118 | @fa-var-bus: "\f207"; 119 | @fa-var-buysellads: "\f20d"; 120 | @fa-var-cab: "\f1ba"; 121 | @fa-var-calculator: "\f1ec"; 122 | @fa-var-calendar: "\f073"; 123 | @fa-var-calendar-check-o: "\f274"; 124 | @fa-var-calendar-minus-o: "\f272"; 125 | @fa-var-calendar-o: "\f133"; 126 | @fa-var-calendar-plus-o: "\f271"; 127 | @fa-var-calendar-times-o: "\f273"; 128 | @fa-var-camera: "\f030"; 129 | @fa-var-camera-retro: "\f083"; 130 | @fa-var-car: "\f1b9"; 131 | @fa-var-caret-down: "\f0d7"; 132 | @fa-var-caret-left: "\f0d9"; 133 | @fa-var-caret-right: "\f0da"; 134 | @fa-var-caret-square-o-down: "\f150"; 135 | @fa-var-caret-square-o-left: "\f191"; 136 | @fa-var-caret-square-o-right: "\f152"; 137 | @fa-var-caret-square-o-up: "\f151"; 138 | @fa-var-caret-up: "\f0d8"; 139 | @fa-var-cart-arrow-down: "\f218"; 140 | @fa-var-cart-plus: "\f217"; 141 | @fa-var-cc: "\f20a"; 142 | @fa-var-cc-amex: "\f1f3"; 143 | @fa-var-cc-diners-club: "\f24c"; 144 | @fa-var-cc-discover: "\f1f2"; 145 | @fa-var-cc-jcb: "\f24b"; 146 | @fa-var-cc-mastercard: "\f1f1"; 147 | @fa-var-cc-paypal: "\f1f4"; 148 | @fa-var-cc-stripe: "\f1f5"; 149 | @fa-var-cc-visa: "\f1f0"; 150 | @fa-var-certificate: "\f0a3"; 151 | @fa-var-chain: "\f0c1"; 152 | @fa-var-chain-broken: "\f127"; 153 | @fa-var-check: "\f00c"; 154 | @fa-var-check-circle: "\f058"; 155 | @fa-var-check-circle-o: "\f05d"; 156 | @fa-var-check-square: "\f14a"; 157 | @fa-var-check-square-o: "\f046"; 158 | @fa-var-chevron-circle-down: "\f13a"; 159 | @fa-var-chevron-circle-left: "\f137"; 160 | @fa-var-chevron-circle-right: "\f138"; 161 | @fa-var-chevron-circle-up: "\f139"; 162 | @fa-var-chevron-down: "\f078"; 163 | @fa-var-chevron-left: "\f053"; 164 | @fa-var-chevron-right: "\f054"; 165 | @fa-var-chevron-up: "\f077"; 166 | @fa-var-child: "\f1ae"; 167 | @fa-var-chrome: "\f268"; 168 | @fa-var-circle: "\f111"; 169 | @fa-var-circle-o: "\f10c"; 170 | @fa-var-circle-o-notch: "\f1ce"; 171 | @fa-var-circle-thin: "\f1db"; 172 | @fa-var-clipboard: "\f0ea"; 173 | @fa-var-clock-o: "\f017"; 174 | @fa-var-clone: "\f24d"; 175 | @fa-var-close: "\f00d"; 176 | @fa-var-cloud: "\f0c2"; 177 | @fa-var-cloud-download: "\f0ed"; 178 | @fa-var-cloud-upload: "\f0ee"; 179 | @fa-var-cny: "\f157"; 180 | @fa-var-code: "\f121"; 181 | @fa-var-code-fork: "\f126"; 182 | @fa-var-codepen: "\f1cb"; 183 | @fa-var-codiepie: "\f284"; 184 | @fa-var-coffee: "\f0f4"; 185 | @fa-var-cog: "\f013"; 186 | @fa-var-cogs: "\f085"; 187 | @fa-var-columns: "\f0db"; 188 | @fa-var-comment: "\f075"; 189 | @fa-var-comment-o: "\f0e5"; 190 | @fa-var-commenting: "\f27a"; 191 | @fa-var-commenting-o: "\f27b"; 192 | @fa-var-comments: "\f086"; 193 | @fa-var-comments-o: "\f0e6"; 194 | @fa-var-compass: "\f14e"; 195 | @fa-var-compress: "\f066"; 196 | @fa-var-connectdevelop: "\f20e"; 197 | @fa-var-contao: "\f26d"; 198 | @fa-var-copy: "\f0c5"; 199 | @fa-var-copyright: "\f1f9"; 200 | @fa-var-creative-commons: "\f25e"; 201 | @fa-var-credit-card: "\f09d"; 202 | @fa-var-credit-card-alt: "\f283"; 203 | @fa-var-crop: "\f125"; 204 | @fa-var-crosshairs: "\f05b"; 205 | @fa-var-css3: "\f13c"; 206 | @fa-var-cube: "\f1b2"; 207 | @fa-var-cubes: "\f1b3"; 208 | @fa-var-cut: "\f0c4"; 209 | @fa-var-cutlery: "\f0f5"; 210 | @fa-var-dashboard: "\f0e4"; 211 | @fa-var-dashcube: "\f210"; 212 | @fa-var-database: "\f1c0"; 213 | @fa-var-deaf: "\f2a4"; 214 | @fa-var-deafness: "\f2a4"; 215 | @fa-var-dedent: "\f03b"; 216 | @fa-var-delicious: "\f1a5"; 217 | @fa-var-desktop: "\f108"; 218 | @fa-var-deviantart: "\f1bd"; 219 | @fa-var-diamond: "\f219"; 220 | @fa-var-digg: "\f1a6"; 221 | @fa-var-dollar: "\f155"; 222 | @fa-var-dot-circle-o: "\f192"; 223 | @fa-var-download: "\f019"; 224 | @fa-var-dribbble: "\f17d"; 225 | @fa-var-drivers-license: "\f2c2"; 226 | @fa-var-drivers-license-o: "\f2c3"; 227 | @fa-var-dropbox: "\f16b"; 228 | @fa-var-drupal: "\f1a9"; 229 | @fa-var-edge: "\f282"; 230 | @fa-var-edit: "\f044"; 231 | @fa-var-eercast: "\f2da"; 232 | @fa-var-eject: "\f052"; 233 | @fa-var-ellipsis-h: "\f141"; 234 | @fa-var-ellipsis-v: "\f142"; 235 | @fa-var-empire: "\f1d1"; 236 | @fa-var-envelope: "\f0e0"; 237 | @fa-var-envelope-o: "\f003"; 238 | @fa-var-envelope-open: "\f2b6"; 239 | @fa-var-envelope-open-o: "\f2b7"; 240 | @fa-var-envelope-square: "\f199"; 241 | @fa-var-envira: "\f299"; 242 | @fa-var-eraser: "\f12d"; 243 | @fa-var-etsy: "\f2d7"; 244 | @fa-var-eur: "\f153"; 245 | @fa-var-euro: "\f153"; 246 | @fa-var-exchange: "\f0ec"; 247 | @fa-var-exclamation: "\f12a"; 248 | @fa-var-exclamation-circle: "\f06a"; 249 | @fa-var-exclamation-triangle: "\f071"; 250 | @fa-var-expand: "\f065"; 251 | @fa-var-expeditedssl: "\f23e"; 252 | @fa-var-external-link: "\f08e"; 253 | @fa-var-external-link-square: "\f14c"; 254 | @fa-var-eye: "\f06e"; 255 | @fa-var-eye-slash: "\f070"; 256 | @fa-var-eyedropper: "\f1fb"; 257 | @fa-var-fa: "\f2b4"; 258 | @fa-var-facebook: "\f09a"; 259 | @fa-var-facebook-f: "\f09a"; 260 | @fa-var-facebook-official: "\f230"; 261 | @fa-var-facebook-square: "\f082"; 262 | @fa-var-fast-backward: "\f049"; 263 | @fa-var-fast-forward: "\f050"; 264 | @fa-var-fax: "\f1ac"; 265 | @fa-var-feed: "\f09e"; 266 | @fa-var-female: "\f182"; 267 | @fa-var-fighter-jet: "\f0fb"; 268 | @fa-var-file: "\f15b"; 269 | @fa-var-file-archive-o: "\f1c6"; 270 | @fa-var-file-audio-o: "\f1c7"; 271 | @fa-var-file-code-o: "\f1c9"; 272 | @fa-var-file-excel-o: "\f1c3"; 273 | @fa-var-file-image-o: "\f1c5"; 274 | @fa-var-file-movie-o: "\f1c8"; 275 | @fa-var-file-o: "\f016"; 276 | @fa-var-file-pdf-o: "\f1c1"; 277 | @fa-var-file-photo-o: "\f1c5"; 278 | @fa-var-file-picture-o: "\f1c5"; 279 | @fa-var-file-powerpoint-o: "\f1c4"; 280 | @fa-var-file-sound-o: "\f1c7"; 281 | @fa-var-file-text: "\f15c"; 282 | @fa-var-file-text-o: "\f0f6"; 283 | @fa-var-file-video-o: "\f1c8"; 284 | @fa-var-file-word-o: "\f1c2"; 285 | @fa-var-file-zip-o: "\f1c6"; 286 | @fa-var-files-o: "\f0c5"; 287 | @fa-var-film: "\f008"; 288 | @fa-var-filter: "\f0b0"; 289 | @fa-var-fire: "\f06d"; 290 | @fa-var-fire-extinguisher: "\f134"; 291 | @fa-var-firefox: "\f269"; 292 | @fa-var-first-order: "\f2b0"; 293 | @fa-var-flag: "\f024"; 294 | @fa-var-flag-checkered: "\f11e"; 295 | @fa-var-flag-o: "\f11d"; 296 | @fa-var-flash: "\f0e7"; 297 | @fa-var-flask: "\f0c3"; 298 | @fa-var-flickr: "\f16e"; 299 | @fa-var-floppy-o: "\f0c7"; 300 | @fa-var-folder: "\f07b"; 301 | @fa-var-folder-o: "\f114"; 302 | @fa-var-folder-open: "\f07c"; 303 | @fa-var-folder-open-o: "\f115"; 304 | @fa-var-font: "\f031"; 305 | @fa-var-font-awesome: "\f2b4"; 306 | @fa-var-fonticons: "\f280"; 307 | @fa-var-fort-awesome: "\f286"; 308 | @fa-var-forumbee: "\f211"; 309 | @fa-var-forward: "\f04e"; 310 | @fa-var-foursquare: "\f180"; 311 | @fa-var-free-code-camp: "\f2c5"; 312 | @fa-var-frown-o: "\f119"; 313 | @fa-var-futbol-o: "\f1e3"; 314 | @fa-var-gamepad: "\f11b"; 315 | @fa-var-gavel: "\f0e3"; 316 | @fa-var-gbp: "\f154"; 317 | @fa-var-ge: "\f1d1"; 318 | @fa-var-gear: "\f013"; 319 | @fa-var-gears: "\f085"; 320 | @fa-var-genderless: "\f22d"; 321 | @fa-var-get-pocket: "\f265"; 322 | @fa-var-gg: "\f260"; 323 | @fa-var-gg-circle: "\f261"; 324 | @fa-var-gift: "\f06b"; 325 | @fa-var-git: "\f1d3"; 326 | @fa-var-git-square: "\f1d2"; 327 | @fa-var-github: "\f09b"; 328 | @fa-var-github-alt: "\f113"; 329 | @fa-var-github-square: "\f092"; 330 | @fa-var-gitlab: "\f296"; 331 | @fa-var-gittip: "\f184"; 332 | @fa-var-glass: "\f000"; 333 | @fa-var-glide: "\f2a5"; 334 | @fa-var-glide-g: "\f2a6"; 335 | @fa-var-globe: "\f0ac"; 336 | @fa-var-google: "\f1a0"; 337 | @fa-var-google-plus: "\f0d5"; 338 | @fa-var-google-plus-circle: "\f2b3"; 339 | @fa-var-google-plus-official: "\f2b3"; 340 | @fa-var-google-plus-square: "\f0d4"; 341 | @fa-var-google-wallet: "\f1ee"; 342 | @fa-var-graduation-cap: "\f19d"; 343 | @fa-var-gratipay: "\f184"; 344 | @fa-var-grav: "\f2d6"; 345 | @fa-var-group: "\f0c0"; 346 | @fa-var-h-square: "\f0fd"; 347 | @fa-var-hacker-news: "\f1d4"; 348 | @fa-var-hand-grab-o: "\f255"; 349 | @fa-var-hand-lizard-o: "\f258"; 350 | @fa-var-hand-o-down: "\f0a7"; 351 | @fa-var-hand-o-left: "\f0a5"; 352 | @fa-var-hand-o-right: "\f0a4"; 353 | @fa-var-hand-o-up: "\f0a6"; 354 | @fa-var-hand-paper-o: "\f256"; 355 | @fa-var-hand-peace-o: "\f25b"; 356 | @fa-var-hand-pointer-o: "\f25a"; 357 | @fa-var-hand-rock-o: "\f255"; 358 | @fa-var-hand-scissors-o: "\f257"; 359 | @fa-var-hand-spock-o: "\f259"; 360 | @fa-var-hand-stop-o: "\f256"; 361 | @fa-var-handshake-o: "\f2b5"; 362 | @fa-var-hard-of-hearing: "\f2a4"; 363 | @fa-var-hashtag: "\f292"; 364 | @fa-var-hdd-o: "\f0a0"; 365 | @fa-var-header: "\f1dc"; 366 | @fa-var-headphones: "\f025"; 367 | @fa-var-heart: "\f004"; 368 | @fa-var-heart-o: "\f08a"; 369 | @fa-var-heartbeat: "\f21e"; 370 | @fa-var-history: "\f1da"; 371 | @fa-var-home: "\f015"; 372 | @fa-var-hospital-o: "\f0f8"; 373 | @fa-var-hotel: "\f236"; 374 | @fa-var-hourglass: "\f254"; 375 | @fa-var-hourglass-1: "\f251"; 376 | @fa-var-hourglass-2: "\f252"; 377 | @fa-var-hourglass-3: "\f253"; 378 | @fa-var-hourglass-end: "\f253"; 379 | @fa-var-hourglass-half: "\f252"; 380 | @fa-var-hourglass-o: "\f250"; 381 | @fa-var-hourglass-start: "\f251"; 382 | @fa-var-houzz: "\f27c"; 383 | @fa-var-html5: "\f13b"; 384 | @fa-var-i-cursor: "\f246"; 385 | @fa-var-id-badge: "\f2c1"; 386 | @fa-var-id-card: "\f2c2"; 387 | @fa-var-id-card-o: "\f2c3"; 388 | @fa-var-ils: "\f20b"; 389 | @fa-var-image: "\f03e"; 390 | @fa-var-imdb: "\f2d8"; 391 | @fa-var-inbox: "\f01c"; 392 | @fa-var-indent: "\f03c"; 393 | @fa-var-industry: "\f275"; 394 | @fa-var-info: "\f129"; 395 | @fa-var-info-circle: "\f05a"; 396 | @fa-var-inr: "\f156"; 397 | @fa-var-instagram: "\f16d"; 398 | @fa-var-institution: "\f19c"; 399 | @fa-var-internet-explorer: "\f26b"; 400 | @fa-var-intersex: "\f224"; 401 | @fa-var-ioxhost: "\f208"; 402 | @fa-var-italic: "\f033"; 403 | @fa-var-joomla: "\f1aa"; 404 | @fa-var-jpy: "\f157"; 405 | @fa-var-jsfiddle: "\f1cc"; 406 | @fa-var-key: "\f084"; 407 | @fa-var-keyboard-o: "\f11c"; 408 | @fa-var-krw: "\f159"; 409 | @fa-var-language: "\f1ab"; 410 | @fa-var-laptop: "\f109"; 411 | @fa-var-lastfm: "\f202"; 412 | @fa-var-lastfm-square: "\f203"; 413 | @fa-var-leaf: "\f06c"; 414 | @fa-var-leanpub: "\f212"; 415 | @fa-var-legal: "\f0e3"; 416 | @fa-var-lemon-o: "\f094"; 417 | @fa-var-level-down: "\f149"; 418 | @fa-var-level-up: "\f148"; 419 | @fa-var-life-bouy: "\f1cd"; 420 | @fa-var-life-buoy: "\f1cd"; 421 | @fa-var-life-ring: "\f1cd"; 422 | @fa-var-life-saver: "\f1cd"; 423 | @fa-var-lightbulb-o: "\f0eb"; 424 | @fa-var-line-chart: "\f201"; 425 | @fa-var-link: "\f0c1"; 426 | @fa-var-linkedin: "\f0e1"; 427 | @fa-var-linkedin-square: "\f08c"; 428 | @fa-var-linode: "\f2b8"; 429 | @fa-var-linux: "\f17c"; 430 | @fa-var-list: "\f03a"; 431 | @fa-var-list-alt: "\f022"; 432 | @fa-var-list-ol: "\f0cb"; 433 | @fa-var-list-ul: "\f0ca"; 434 | @fa-var-location-arrow: "\f124"; 435 | @fa-var-lock: "\f023"; 436 | @fa-var-long-arrow-down: "\f175"; 437 | @fa-var-long-arrow-left: "\f177"; 438 | @fa-var-long-arrow-right: "\f178"; 439 | @fa-var-long-arrow-up: "\f176"; 440 | @fa-var-low-vision: "\f2a8"; 441 | @fa-var-magic: "\f0d0"; 442 | @fa-var-magnet: "\f076"; 443 | @fa-var-mail-forward: "\f064"; 444 | @fa-var-mail-reply: "\f112"; 445 | @fa-var-mail-reply-all: "\f122"; 446 | @fa-var-male: "\f183"; 447 | @fa-var-map: "\f279"; 448 | @fa-var-map-marker: "\f041"; 449 | @fa-var-map-o: "\f278"; 450 | @fa-var-map-pin: "\f276"; 451 | @fa-var-map-signs: "\f277"; 452 | @fa-var-mars: "\f222"; 453 | @fa-var-mars-double: "\f227"; 454 | @fa-var-mars-stroke: "\f229"; 455 | @fa-var-mars-stroke-h: "\f22b"; 456 | @fa-var-mars-stroke-v: "\f22a"; 457 | @fa-var-maxcdn: "\f136"; 458 | @fa-var-meanpath: "\f20c"; 459 | @fa-var-medium: "\f23a"; 460 | @fa-var-medkit: "\f0fa"; 461 | @fa-var-meetup: "\f2e0"; 462 | @fa-var-meh-o: "\f11a"; 463 | @fa-var-mercury: "\f223"; 464 | @fa-var-microchip: "\f2db"; 465 | @fa-var-microphone: "\f130"; 466 | @fa-var-microphone-slash: "\f131"; 467 | @fa-var-minus: "\f068"; 468 | @fa-var-minus-circle: "\f056"; 469 | @fa-var-minus-square: "\f146"; 470 | @fa-var-minus-square-o: "\f147"; 471 | @fa-var-mixcloud: "\f289"; 472 | @fa-var-mobile: "\f10b"; 473 | @fa-var-mobile-phone: "\f10b"; 474 | @fa-var-modx: "\f285"; 475 | @fa-var-money: "\f0d6"; 476 | @fa-var-moon-o: "\f186"; 477 | @fa-var-mortar-board: "\f19d"; 478 | @fa-var-motorcycle: "\f21c"; 479 | @fa-var-mouse-pointer: "\f245"; 480 | @fa-var-music: "\f001"; 481 | @fa-var-navicon: "\f0c9"; 482 | @fa-var-neuter: "\f22c"; 483 | @fa-var-newspaper-o: "\f1ea"; 484 | @fa-var-object-group: "\f247"; 485 | @fa-var-object-ungroup: "\f248"; 486 | @fa-var-odnoklassniki: "\f263"; 487 | @fa-var-odnoklassniki-square: "\f264"; 488 | @fa-var-opencart: "\f23d"; 489 | @fa-var-openid: "\f19b"; 490 | @fa-var-opera: "\f26a"; 491 | @fa-var-optin-monster: "\f23c"; 492 | @fa-var-outdent: "\f03b"; 493 | @fa-var-pagelines: "\f18c"; 494 | @fa-var-paint-brush: "\f1fc"; 495 | @fa-var-paper-plane: "\f1d8"; 496 | @fa-var-paper-plane-o: "\f1d9"; 497 | @fa-var-paperclip: "\f0c6"; 498 | @fa-var-paragraph: "\f1dd"; 499 | @fa-var-paste: "\f0ea"; 500 | @fa-var-pause: "\f04c"; 501 | @fa-var-pause-circle: "\f28b"; 502 | @fa-var-pause-circle-o: "\f28c"; 503 | @fa-var-paw: "\f1b0"; 504 | @fa-var-paypal: "\f1ed"; 505 | @fa-var-pencil: "\f040"; 506 | @fa-var-pencil-square: "\f14b"; 507 | @fa-var-pencil-square-o: "\f044"; 508 | @fa-var-percent: "\f295"; 509 | @fa-var-phone: "\f095"; 510 | @fa-var-phone-square: "\f098"; 511 | @fa-var-photo: "\f03e"; 512 | @fa-var-picture-o: "\f03e"; 513 | @fa-var-pie-chart: "\f200"; 514 | @fa-var-pied-piper: "\f2ae"; 515 | @fa-var-pied-piper-alt: "\f1a8"; 516 | @fa-var-pied-piper-pp: "\f1a7"; 517 | @fa-var-pinterest: "\f0d2"; 518 | @fa-var-pinterest-p: "\f231"; 519 | @fa-var-pinterest-square: "\f0d3"; 520 | @fa-var-plane: "\f072"; 521 | @fa-var-play: "\f04b"; 522 | @fa-var-play-circle: "\f144"; 523 | @fa-var-play-circle-o: "\f01d"; 524 | @fa-var-plug: "\f1e6"; 525 | @fa-var-plus: "\f067"; 526 | @fa-var-plus-circle: "\f055"; 527 | @fa-var-plus-square: "\f0fe"; 528 | @fa-var-plus-square-o: "\f196"; 529 | @fa-var-podcast: "\f2ce"; 530 | @fa-var-power-off: "\f011"; 531 | @fa-var-print: "\f02f"; 532 | @fa-var-product-hunt: "\f288"; 533 | @fa-var-puzzle-piece: "\f12e"; 534 | @fa-var-qq: "\f1d6"; 535 | @fa-var-qrcode: "\f029"; 536 | @fa-var-question: "\f128"; 537 | @fa-var-question-circle: "\f059"; 538 | @fa-var-question-circle-o: "\f29c"; 539 | @fa-var-quora: "\f2c4"; 540 | @fa-var-quote-left: "\f10d"; 541 | @fa-var-quote-right: "\f10e"; 542 | @fa-var-ra: "\f1d0"; 543 | @fa-var-random: "\f074"; 544 | @fa-var-ravelry: "\f2d9"; 545 | @fa-var-rebel: "\f1d0"; 546 | @fa-var-recycle: "\f1b8"; 547 | @fa-var-reddit: "\f1a1"; 548 | @fa-var-reddit-alien: "\f281"; 549 | @fa-var-reddit-square: "\f1a2"; 550 | @fa-var-refresh: "\f021"; 551 | @fa-var-registered: "\f25d"; 552 | @fa-var-remove: "\f00d"; 553 | @fa-var-renren: "\f18b"; 554 | @fa-var-reorder: "\f0c9"; 555 | @fa-var-repeat: "\f01e"; 556 | @fa-var-reply: "\f112"; 557 | @fa-var-reply-all: "\f122"; 558 | @fa-var-resistance: "\f1d0"; 559 | @fa-var-retweet: "\f079"; 560 | @fa-var-rmb: "\f157"; 561 | @fa-var-road: "\f018"; 562 | @fa-var-rocket: "\f135"; 563 | @fa-var-rotate-left: "\f0e2"; 564 | @fa-var-rotate-right: "\f01e"; 565 | @fa-var-rouble: "\f158"; 566 | @fa-var-rss: "\f09e"; 567 | @fa-var-rss-square: "\f143"; 568 | @fa-var-rub: "\f158"; 569 | @fa-var-ruble: "\f158"; 570 | @fa-var-rupee: "\f156"; 571 | @fa-var-s15: "\f2cd"; 572 | @fa-var-safari: "\f267"; 573 | @fa-var-save: "\f0c7"; 574 | @fa-var-scissors: "\f0c4"; 575 | @fa-var-scribd: "\f28a"; 576 | @fa-var-search: "\f002"; 577 | @fa-var-search-minus: "\f010"; 578 | @fa-var-search-plus: "\f00e"; 579 | @fa-var-sellsy: "\f213"; 580 | @fa-var-send: "\f1d8"; 581 | @fa-var-send-o: "\f1d9"; 582 | @fa-var-server: "\f233"; 583 | @fa-var-share: "\f064"; 584 | @fa-var-share-alt: "\f1e0"; 585 | @fa-var-share-alt-square: "\f1e1"; 586 | @fa-var-share-square: "\f14d"; 587 | @fa-var-share-square-o: "\f045"; 588 | @fa-var-shekel: "\f20b"; 589 | @fa-var-sheqel: "\f20b"; 590 | @fa-var-shield: "\f132"; 591 | @fa-var-ship: "\f21a"; 592 | @fa-var-shirtsinbulk: "\f214"; 593 | @fa-var-shopping-bag: "\f290"; 594 | @fa-var-shopping-basket: "\f291"; 595 | @fa-var-shopping-cart: "\f07a"; 596 | @fa-var-shower: "\f2cc"; 597 | @fa-var-sign-in: "\f090"; 598 | @fa-var-sign-language: "\f2a7"; 599 | @fa-var-sign-out: "\f08b"; 600 | @fa-var-signal: "\f012"; 601 | @fa-var-signing: "\f2a7"; 602 | @fa-var-simplybuilt: "\f215"; 603 | @fa-var-sitemap: "\f0e8"; 604 | @fa-var-skyatlas: "\f216"; 605 | @fa-var-skype: "\f17e"; 606 | @fa-var-slack: "\f198"; 607 | @fa-var-sliders: "\f1de"; 608 | @fa-var-slideshare: "\f1e7"; 609 | @fa-var-smile-o: "\f118"; 610 | @fa-var-snapchat: "\f2ab"; 611 | @fa-var-snapchat-ghost: "\f2ac"; 612 | @fa-var-snapchat-square: "\f2ad"; 613 | @fa-var-snowflake-o: "\f2dc"; 614 | @fa-var-soccer-ball-o: "\f1e3"; 615 | @fa-var-sort: "\f0dc"; 616 | @fa-var-sort-alpha-asc: "\f15d"; 617 | @fa-var-sort-alpha-desc: "\f15e"; 618 | @fa-var-sort-amount-asc: "\f160"; 619 | @fa-var-sort-amount-desc: "\f161"; 620 | @fa-var-sort-asc: "\f0de"; 621 | @fa-var-sort-desc: "\f0dd"; 622 | @fa-var-sort-down: "\f0dd"; 623 | @fa-var-sort-numeric-asc: "\f162"; 624 | @fa-var-sort-numeric-desc: "\f163"; 625 | @fa-var-sort-up: "\f0de"; 626 | @fa-var-soundcloud: "\f1be"; 627 | @fa-var-space-shuttle: "\f197"; 628 | @fa-var-spinner: "\f110"; 629 | @fa-var-spoon: "\f1b1"; 630 | @fa-var-spotify: "\f1bc"; 631 | @fa-var-square: "\f0c8"; 632 | @fa-var-square-o: "\f096"; 633 | @fa-var-stack-exchange: "\f18d"; 634 | @fa-var-stack-overflow: "\f16c"; 635 | @fa-var-star: "\f005"; 636 | @fa-var-star-half: "\f089"; 637 | @fa-var-star-half-empty: "\f123"; 638 | @fa-var-star-half-full: "\f123"; 639 | @fa-var-star-half-o: "\f123"; 640 | @fa-var-star-o: "\f006"; 641 | @fa-var-steam: "\f1b6"; 642 | @fa-var-steam-square: "\f1b7"; 643 | @fa-var-step-backward: "\f048"; 644 | @fa-var-step-forward: "\f051"; 645 | @fa-var-stethoscope: "\f0f1"; 646 | @fa-var-sticky-note: "\f249"; 647 | @fa-var-sticky-note-o: "\f24a"; 648 | @fa-var-stop: "\f04d"; 649 | @fa-var-stop-circle: "\f28d"; 650 | @fa-var-stop-circle-o: "\f28e"; 651 | @fa-var-street-view: "\f21d"; 652 | @fa-var-strikethrough: "\f0cc"; 653 | @fa-var-stumbleupon: "\f1a4"; 654 | @fa-var-stumbleupon-circle: "\f1a3"; 655 | @fa-var-subscript: "\f12c"; 656 | @fa-var-subway: "\f239"; 657 | @fa-var-suitcase: "\f0f2"; 658 | @fa-var-sun-o: "\f185"; 659 | @fa-var-superpowers: "\f2dd"; 660 | @fa-var-superscript: "\f12b"; 661 | @fa-var-support: "\f1cd"; 662 | @fa-var-table: "\f0ce"; 663 | @fa-var-tablet: "\f10a"; 664 | @fa-var-tachometer: "\f0e4"; 665 | @fa-var-tag: "\f02b"; 666 | @fa-var-tags: "\f02c"; 667 | @fa-var-tasks: "\f0ae"; 668 | @fa-var-taxi: "\f1ba"; 669 | @fa-var-telegram: "\f2c6"; 670 | @fa-var-television: "\f26c"; 671 | @fa-var-tencent-weibo: "\f1d5"; 672 | @fa-var-terminal: "\f120"; 673 | @fa-var-text-height: "\f034"; 674 | @fa-var-text-width: "\f035"; 675 | @fa-var-th: "\f00a"; 676 | @fa-var-th-large: "\f009"; 677 | @fa-var-th-list: "\f00b"; 678 | @fa-var-themeisle: "\f2b2"; 679 | @fa-var-thermometer: "\f2c7"; 680 | @fa-var-thermometer-0: "\f2cb"; 681 | @fa-var-thermometer-1: "\f2ca"; 682 | @fa-var-thermometer-2: "\f2c9"; 683 | @fa-var-thermometer-3: "\f2c8"; 684 | @fa-var-thermometer-4: "\f2c7"; 685 | @fa-var-thermometer-empty: "\f2cb"; 686 | @fa-var-thermometer-full: "\f2c7"; 687 | @fa-var-thermometer-half: "\f2c9"; 688 | @fa-var-thermometer-quarter: "\f2ca"; 689 | @fa-var-thermometer-three-quarters: "\f2c8"; 690 | @fa-var-thumb-tack: "\f08d"; 691 | @fa-var-thumbs-down: "\f165"; 692 | @fa-var-thumbs-o-down: "\f088"; 693 | @fa-var-thumbs-o-up: "\f087"; 694 | @fa-var-thumbs-up: "\f164"; 695 | @fa-var-ticket: "\f145"; 696 | @fa-var-times: "\f00d"; 697 | @fa-var-times-circle: "\f057"; 698 | @fa-var-times-circle-o: "\f05c"; 699 | @fa-var-times-rectangle: "\f2d3"; 700 | @fa-var-times-rectangle-o: "\f2d4"; 701 | @fa-var-tint: "\f043"; 702 | @fa-var-toggle-down: "\f150"; 703 | @fa-var-toggle-left: "\f191"; 704 | @fa-var-toggle-off: "\f204"; 705 | @fa-var-toggle-on: "\f205"; 706 | @fa-var-toggle-right: "\f152"; 707 | @fa-var-toggle-up: "\f151"; 708 | @fa-var-trademark: "\f25c"; 709 | @fa-var-train: "\f238"; 710 | @fa-var-transgender: "\f224"; 711 | @fa-var-transgender-alt: "\f225"; 712 | @fa-var-trash: "\f1f8"; 713 | @fa-var-trash-o: "\f014"; 714 | @fa-var-tree: "\f1bb"; 715 | @fa-var-trello: "\f181"; 716 | @fa-var-tripadvisor: "\f262"; 717 | @fa-var-trophy: "\f091"; 718 | @fa-var-truck: "\f0d1"; 719 | @fa-var-try: "\f195"; 720 | @fa-var-tty: "\f1e4"; 721 | @fa-var-tumblr: "\f173"; 722 | @fa-var-tumblr-square: "\f174"; 723 | @fa-var-turkish-lira: "\f195"; 724 | @fa-var-tv: "\f26c"; 725 | @fa-var-twitch: "\f1e8"; 726 | @fa-var-twitter: "\f099"; 727 | @fa-var-twitter-square: "\f081"; 728 | @fa-var-umbrella: "\f0e9"; 729 | @fa-var-underline: "\f0cd"; 730 | @fa-var-undo: "\f0e2"; 731 | @fa-var-universal-access: "\f29a"; 732 | @fa-var-university: "\f19c"; 733 | @fa-var-unlink: "\f127"; 734 | @fa-var-unlock: "\f09c"; 735 | @fa-var-unlock-alt: "\f13e"; 736 | @fa-var-unsorted: "\f0dc"; 737 | @fa-var-upload: "\f093"; 738 | @fa-var-usb: "\f287"; 739 | @fa-var-usd: "\f155"; 740 | @fa-var-user: "\f007"; 741 | @fa-var-user-circle: "\f2bd"; 742 | @fa-var-user-circle-o: "\f2be"; 743 | @fa-var-user-md: "\f0f0"; 744 | @fa-var-user-o: "\f2c0"; 745 | @fa-var-user-plus: "\f234"; 746 | @fa-var-user-secret: "\f21b"; 747 | @fa-var-user-times: "\f235"; 748 | @fa-var-users: "\f0c0"; 749 | @fa-var-vcard: "\f2bb"; 750 | @fa-var-vcard-o: "\f2bc"; 751 | @fa-var-venus: "\f221"; 752 | @fa-var-venus-double: "\f226"; 753 | @fa-var-venus-mars: "\f228"; 754 | @fa-var-viacoin: "\f237"; 755 | @fa-var-viadeo: "\f2a9"; 756 | @fa-var-viadeo-square: "\f2aa"; 757 | @fa-var-video-camera: "\f03d"; 758 | @fa-var-vimeo: "\f27d"; 759 | @fa-var-vimeo-square: "\f194"; 760 | @fa-var-vine: "\f1ca"; 761 | @fa-var-vk: "\f189"; 762 | @fa-var-volume-control-phone: "\f2a0"; 763 | @fa-var-volume-down: "\f027"; 764 | @fa-var-volume-off: "\f026"; 765 | @fa-var-volume-up: "\f028"; 766 | @fa-var-warning: "\f071"; 767 | @fa-var-wechat: "\f1d7"; 768 | @fa-var-weibo: "\f18a"; 769 | @fa-var-weixin: "\f1d7"; 770 | @fa-var-whatsapp: "\f232"; 771 | @fa-var-wheelchair: "\f193"; 772 | @fa-var-wheelchair-alt: "\f29b"; 773 | @fa-var-wifi: "\f1eb"; 774 | @fa-var-wikipedia-w: "\f266"; 775 | @fa-var-window-close: "\f2d3"; 776 | @fa-var-window-close-o: "\f2d4"; 777 | @fa-var-window-maximize: "\f2d0"; 778 | @fa-var-window-minimize: "\f2d1"; 779 | @fa-var-window-restore: "\f2d2"; 780 | @fa-var-windows: "\f17a"; 781 | @fa-var-won: "\f159"; 782 | @fa-var-wordpress: "\f19a"; 783 | @fa-var-wpbeginner: "\f297"; 784 | @fa-var-wpexplorer: "\f2de"; 785 | @fa-var-wpforms: "\f298"; 786 | @fa-var-wrench: "\f0ad"; 787 | @fa-var-xing: "\f168"; 788 | @fa-var-xing-square: "\f169"; 789 | @fa-var-y-combinator: "\f23b"; 790 | @fa-var-y-combinator-square: "\f1d4"; 791 | @fa-var-yahoo: "\f19e"; 792 | @fa-var-yc: "\f23b"; 793 | @fa-var-yc-square: "\f1d4"; 794 | @fa-var-yelp: "\f1e9"; 795 | @fa-var-yen: "\f157"; 796 | @fa-var-yoast: "\f2b1"; 797 | @fa-var-youtube: "\f167"; 798 | @fa-var-youtube-play: "\f16a"; 799 | @fa-var-youtube-square: "\f166"; 800 | 801 | -------------------------------------------------------------------------------- /public/font-awesome-4.7.0/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | // Variables 2 | // -------------------------- 3 | 4 | $fa-font-path: "../fonts" !default; 5 | $fa-font-size-base: 14px !default; 6 | $fa-line-height-base: 1 !default; 7 | //$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly 8 | $fa-css-prefix: fa !default; 9 | $fa-version: "4.7.0" !default; 10 | $fa-border-color: #eee !default; 11 | $fa-inverse: #fff !default; 12 | $fa-li-width: (30em / 14) !default; 13 | 14 | $fa-var-500px: "\f26e"; 15 | $fa-var-address-book: "\f2b9"; 16 | $fa-var-address-book-o: "\f2ba"; 17 | $fa-var-address-card: "\f2bb"; 18 | $fa-var-address-card-o: "\f2bc"; 19 | $fa-var-adjust: "\f042"; 20 | $fa-var-adn: "\f170"; 21 | $fa-var-align-center: "\f037"; 22 | $fa-var-align-justify: "\f039"; 23 | $fa-var-align-left: "\f036"; 24 | $fa-var-align-right: "\f038"; 25 | $fa-var-amazon: "\f270"; 26 | $fa-var-ambulance: "\f0f9"; 27 | $fa-var-american-sign-language-interpreting: "\f2a3"; 28 | $fa-var-anchor: "\f13d"; 29 | $fa-var-android: "\f17b"; 30 | $fa-var-angellist: "\f209"; 31 | $fa-var-angle-double-down: "\f103"; 32 | $fa-var-angle-double-left: "\f100"; 33 | $fa-var-angle-double-right: "\f101"; 34 | $fa-var-angle-double-up: "\f102"; 35 | $fa-var-angle-down: "\f107"; 36 | $fa-var-angle-left: "\f104"; 37 | $fa-var-angle-right: "\f105"; 38 | $fa-var-angle-up: "\f106"; 39 | $fa-var-apple: "\f179"; 40 | $fa-var-archive: "\f187"; 41 | $fa-var-area-chart: "\f1fe"; 42 | $fa-var-arrow-circle-down: "\f0ab"; 43 | $fa-var-arrow-circle-left: "\f0a8"; 44 | $fa-var-arrow-circle-o-down: "\f01a"; 45 | $fa-var-arrow-circle-o-left: "\f190"; 46 | $fa-var-arrow-circle-o-right: "\f18e"; 47 | $fa-var-arrow-circle-o-up: "\f01b"; 48 | $fa-var-arrow-circle-right: "\f0a9"; 49 | $fa-var-arrow-circle-up: "\f0aa"; 50 | $fa-var-arrow-down: "\f063"; 51 | $fa-var-arrow-left: "\f060"; 52 | $fa-var-arrow-right: "\f061"; 53 | $fa-var-arrow-up: "\f062"; 54 | $fa-var-arrows: "\f047"; 55 | $fa-var-arrows-alt: "\f0b2"; 56 | $fa-var-arrows-h: "\f07e"; 57 | $fa-var-arrows-v: "\f07d"; 58 | $fa-var-asl-interpreting: "\f2a3"; 59 | $fa-var-assistive-listening-systems: "\f2a2"; 60 | $fa-var-asterisk: "\f069"; 61 | $fa-var-at: "\f1fa"; 62 | $fa-var-audio-description: "\f29e"; 63 | $fa-var-automobile: "\f1b9"; 64 | $fa-var-backward: "\f04a"; 65 | $fa-var-balance-scale: "\f24e"; 66 | $fa-var-ban: "\f05e"; 67 | $fa-var-bandcamp: "\f2d5"; 68 | $fa-var-bank: "\f19c"; 69 | $fa-var-bar-chart: "\f080"; 70 | $fa-var-bar-chart-o: "\f080"; 71 | $fa-var-barcode: "\f02a"; 72 | $fa-var-bars: "\f0c9"; 73 | $fa-var-bath: "\f2cd"; 74 | $fa-var-bathtub: "\f2cd"; 75 | $fa-var-battery: "\f240"; 76 | $fa-var-battery-0: "\f244"; 77 | $fa-var-battery-1: "\f243"; 78 | $fa-var-battery-2: "\f242"; 79 | $fa-var-battery-3: "\f241"; 80 | $fa-var-battery-4: "\f240"; 81 | $fa-var-battery-empty: "\f244"; 82 | $fa-var-battery-full: "\f240"; 83 | $fa-var-battery-half: "\f242"; 84 | $fa-var-battery-quarter: "\f243"; 85 | $fa-var-battery-three-quarters: "\f241"; 86 | $fa-var-bed: "\f236"; 87 | $fa-var-beer: "\f0fc"; 88 | $fa-var-behance: "\f1b4"; 89 | $fa-var-behance-square: "\f1b5"; 90 | $fa-var-bell: "\f0f3"; 91 | $fa-var-bell-o: "\f0a2"; 92 | $fa-var-bell-slash: "\f1f6"; 93 | $fa-var-bell-slash-o: "\f1f7"; 94 | $fa-var-bicycle: "\f206"; 95 | $fa-var-binoculars: "\f1e5"; 96 | $fa-var-birthday-cake: "\f1fd"; 97 | $fa-var-bitbucket: "\f171"; 98 | $fa-var-bitbucket-square: "\f172"; 99 | $fa-var-bitcoin: "\f15a"; 100 | $fa-var-black-tie: "\f27e"; 101 | $fa-var-blind: "\f29d"; 102 | $fa-var-bluetooth: "\f293"; 103 | $fa-var-bluetooth-b: "\f294"; 104 | $fa-var-bold: "\f032"; 105 | $fa-var-bolt: "\f0e7"; 106 | $fa-var-bomb: "\f1e2"; 107 | $fa-var-book: "\f02d"; 108 | $fa-var-bookmark: "\f02e"; 109 | $fa-var-bookmark-o: "\f097"; 110 | $fa-var-braille: "\f2a1"; 111 | $fa-var-briefcase: "\f0b1"; 112 | $fa-var-btc: "\f15a"; 113 | $fa-var-bug: "\f188"; 114 | $fa-var-building: "\f1ad"; 115 | $fa-var-building-o: "\f0f7"; 116 | $fa-var-bullhorn: "\f0a1"; 117 | $fa-var-bullseye: "\f140"; 118 | $fa-var-bus: "\f207"; 119 | $fa-var-buysellads: "\f20d"; 120 | $fa-var-cab: "\f1ba"; 121 | $fa-var-calculator: "\f1ec"; 122 | $fa-var-calendar: "\f073"; 123 | $fa-var-calendar-check-o: "\f274"; 124 | $fa-var-calendar-minus-o: "\f272"; 125 | $fa-var-calendar-o: "\f133"; 126 | $fa-var-calendar-plus-o: "\f271"; 127 | $fa-var-calendar-times-o: "\f273"; 128 | $fa-var-camera: "\f030"; 129 | $fa-var-camera-retro: "\f083"; 130 | $fa-var-car: "\f1b9"; 131 | $fa-var-caret-down: "\f0d7"; 132 | $fa-var-caret-left: "\f0d9"; 133 | $fa-var-caret-right: "\f0da"; 134 | $fa-var-caret-square-o-down: "\f150"; 135 | $fa-var-caret-square-o-left: "\f191"; 136 | $fa-var-caret-square-o-right: "\f152"; 137 | $fa-var-caret-square-o-up: "\f151"; 138 | $fa-var-caret-up: "\f0d8"; 139 | $fa-var-cart-arrow-down: "\f218"; 140 | $fa-var-cart-plus: "\f217"; 141 | $fa-var-cc: "\f20a"; 142 | $fa-var-cc-amex: "\f1f3"; 143 | $fa-var-cc-diners-club: "\f24c"; 144 | $fa-var-cc-discover: "\f1f2"; 145 | $fa-var-cc-jcb: "\f24b"; 146 | $fa-var-cc-mastercard: "\f1f1"; 147 | $fa-var-cc-paypal: "\f1f4"; 148 | $fa-var-cc-stripe: "\f1f5"; 149 | $fa-var-cc-visa: "\f1f0"; 150 | $fa-var-certificate: "\f0a3"; 151 | $fa-var-chain: "\f0c1"; 152 | $fa-var-chain-broken: "\f127"; 153 | $fa-var-check: "\f00c"; 154 | $fa-var-check-circle: "\f058"; 155 | $fa-var-check-circle-o: "\f05d"; 156 | $fa-var-check-square: "\f14a"; 157 | $fa-var-check-square-o: "\f046"; 158 | $fa-var-chevron-circle-down: "\f13a"; 159 | $fa-var-chevron-circle-left: "\f137"; 160 | $fa-var-chevron-circle-right: "\f138"; 161 | $fa-var-chevron-circle-up: "\f139"; 162 | $fa-var-chevron-down: "\f078"; 163 | $fa-var-chevron-left: "\f053"; 164 | $fa-var-chevron-right: "\f054"; 165 | $fa-var-chevron-up: "\f077"; 166 | $fa-var-child: "\f1ae"; 167 | $fa-var-chrome: "\f268"; 168 | $fa-var-circle: "\f111"; 169 | $fa-var-circle-o: "\f10c"; 170 | $fa-var-circle-o-notch: "\f1ce"; 171 | $fa-var-circle-thin: "\f1db"; 172 | $fa-var-clipboard: "\f0ea"; 173 | $fa-var-clock-o: "\f017"; 174 | $fa-var-clone: "\f24d"; 175 | $fa-var-close: "\f00d"; 176 | $fa-var-cloud: "\f0c2"; 177 | $fa-var-cloud-download: "\f0ed"; 178 | $fa-var-cloud-upload: "\f0ee"; 179 | $fa-var-cny: "\f157"; 180 | $fa-var-code: "\f121"; 181 | $fa-var-code-fork: "\f126"; 182 | $fa-var-codepen: "\f1cb"; 183 | $fa-var-codiepie: "\f284"; 184 | $fa-var-coffee: "\f0f4"; 185 | $fa-var-cog: "\f013"; 186 | $fa-var-cogs: "\f085"; 187 | $fa-var-columns: "\f0db"; 188 | $fa-var-comment: "\f075"; 189 | $fa-var-comment-o: "\f0e5"; 190 | $fa-var-commenting: "\f27a"; 191 | $fa-var-commenting-o: "\f27b"; 192 | $fa-var-comments: "\f086"; 193 | $fa-var-comments-o: "\f0e6"; 194 | $fa-var-compass: "\f14e"; 195 | $fa-var-compress: "\f066"; 196 | $fa-var-connectdevelop: "\f20e"; 197 | $fa-var-contao: "\f26d"; 198 | $fa-var-copy: "\f0c5"; 199 | $fa-var-copyright: "\f1f9"; 200 | $fa-var-creative-commons: "\f25e"; 201 | $fa-var-credit-card: "\f09d"; 202 | $fa-var-credit-card-alt: "\f283"; 203 | $fa-var-crop: "\f125"; 204 | $fa-var-crosshairs: "\f05b"; 205 | $fa-var-css3: "\f13c"; 206 | $fa-var-cube: "\f1b2"; 207 | $fa-var-cubes: "\f1b3"; 208 | $fa-var-cut: "\f0c4"; 209 | $fa-var-cutlery: "\f0f5"; 210 | $fa-var-dashboard: "\f0e4"; 211 | $fa-var-dashcube: "\f210"; 212 | $fa-var-database: "\f1c0"; 213 | $fa-var-deaf: "\f2a4"; 214 | $fa-var-deafness: "\f2a4"; 215 | $fa-var-dedent: "\f03b"; 216 | $fa-var-delicious: "\f1a5"; 217 | $fa-var-desktop: "\f108"; 218 | $fa-var-deviantart: "\f1bd"; 219 | $fa-var-diamond: "\f219"; 220 | $fa-var-digg: "\f1a6"; 221 | $fa-var-dollar: "\f155"; 222 | $fa-var-dot-circle-o: "\f192"; 223 | $fa-var-download: "\f019"; 224 | $fa-var-dribbble: "\f17d"; 225 | $fa-var-drivers-license: "\f2c2"; 226 | $fa-var-drivers-license-o: "\f2c3"; 227 | $fa-var-dropbox: "\f16b"; 228 | $fa-var-drupal: "\f1a9"; 229 | $fa-var-edge: "\f282"; 230 | $fa-var-edit: "\f044"; 231 | $fa-var-eercast: "\f2da"; 232 | $fa-var-eject: "\f052"; 233 | $fa-var-ellipsis-h: "\f141"; 234 | $fa-var-ellipsis-v: "\f142"; 235 | $fa-var-empire: "\f1d1"; 236 | $fa-var-envelope: "\f0e0"; 237 | $fa-var-envelope-o: "\f003"; 238 | $fa-var-envelope-open: "\f2b6"; 239 | $fa-var-envelope-open-o: "\f2b7"; 240 | $fa-var-envelope-square: "\f199"; 241 | $fa-var-envira: "\f299"; 242 | $fa-var-eraser: "\f12d"; 243 | $fa-var-etsy: "\f2d7"; 244 | $fa-var-eur: "\f153"; 245 | $fa-var-euro: "\f153"; 246 | $fa-var-exchange: "\f0ec"; 247 | $fa-var-exclamation: "\f12a"; 248 | $fa-var-exclamation-circle: "\f06a"; 249 | $fa-var-exclamation-triangle: "\f071"; 250 | $fa-var-expand: "\f065"; 251 | $fa-var-expeditedssl: "\f23e"; 252 | $fa-var-external-link: "\f08e"; 253 | $fa-var-external-link-square: "\f14c"; 254 | $fa-var-eye: "\f06e"; 255 | $fa-var-eye-slash: "\f070"; 256 | $fa-var-eyedropper: "\f1fb"; 257 | $fa-var-fa: "\f2b4"; 258 | $fa-var-facebook: "\f09a"; 259 | $fa-var-facebook-f: "\f09a"; 260 | $fa-var-facebook-official: "\f230"; 261 | $fa-var-facebook-square: "\f082"; 262 | $fa-var-fast-backward: "\f049"; 263 | $fa-var-fast-forward: "\f050"; 264 | $fa-var-fax: "\f1ac"; 265 | $fa-var-feed: "\f09e"; 266 | $fa-var-female: "\f182"; 267 | $fa-var-fighter-jet: "\f0fb"; 268 | $fa-var-file: "\f15b"; 269 | $fa-var-file-archive-o: "\f1c6"; 270 | $fa-var-file-audio-o: "\f1c7"; 271 | $fa-var-file-code-o: "\f1c9"; 272 | $fa-var-file-excel-o: "\f1c3"; 273 | $fa-var-file-image-o: "\f1c5"; 274 | $fa-var-file-movie-o: "\f1c8"; 275 | $fa-var-file-o: "\f016"; 276 | $fa-var-file-pdf-o: "\f1c1"; 277 | $fa-var-file-photo-o: "\f1c5"; 278 | $fa-var-file-picture-o: "\f1c5"; 279 | $fa-var-file-powerpoint-o: "\f1c4"; 280 | $fa-var-file-sound-o: "\f1c7"; 281 | $fa-var-file-text: "\f15c"; 282 | $fa-var-file-text-o: "\f0f6"; 283 | $fa-var-file-video-o: "\f1c8"; 284 | $fa-var-file-word-o: "\f1c2"; 285 | $fa-var-file-zip-o: "\f1c6"; 286 | $fa-var-files-o: "\f0c5"; 287 | $fa-var-film: "\f008"; 288 | $fa-var-filter: "\f0b0"; 289 | $fa-var-fire: "\f06d"; 290 | $fa-var-fire-extinguisher: "\f134"; 291 | $fa-var-firefox: "\f269"; 292 | $fa-var-first-order: "\f2b0"; 293 | $fa-var-flag: "\f024"; 294 | $fa-var-flag-checkered: "\f11e"; 295 | $fa-var-flag-o: "\f11d"; 296 | $fa-var-flash: "\f0e7"; 297 | $fa-var-flask: "\f0c3"; 298 | $fa-var-flickr: "\f16e"; 299 | $fa-var-floppy-o: "\f0c7"; 300 | $fa-var-folder: "\f07b"; 301 | $fa-var-folder-o: "\f114"; 302 | $fa-var-folder-open: "\f07c"; 303 | $fa-var-folder-open-o: "\f115"; 304 | $fa-var-font: "\f031"; 305 | $fa-var-font-awesome: "\f2b4"; 306 | $fa-var-fonticons: "\f280"; 307 | $fa-var-fort-awesome: "\f286"; 308 | $fa-var-forumbee: "\f211"; 309 | $fa-var-forward: "\f04e"; 310 | $fa-var-foursquare: "\f180"; 311 | $fa-var-free-code-camp: "\f2c5"; 312 | $fa-var-frown-o: "\f119"; 313 | $fa-var-futbol-o: "\f1e3"; 314 | $fa-var-gamepad: "\f11b"; 315 | $fa-var-gavel: "\f0e3"; 316 | $fa-var-gbp: "\f154"; 317 | $fa-var-ge: "\f1d1"; 318 | $fa-var-gear: "\f013"; 319 | $fa-var-gears: "\f085"; 320 | $fa-var-genderless: "\f22d"; 321 | $fa-var-get-pocket: "\f265"; 322 | $fa-var-gg: "\f260"; 323 | $fa-var-gg-circle: "\f261"; 324 | $fa-var-gift: "\f06b"; 325 | $fa-var-git: "\f1d3"; 326 | $fa-var-git-square: "\f1d2"; 327 | $fa-var-github: "\f09b"; 328 | $fa-var-github-alt: "\f113"; 329 | $fa-var-github-square: "\f092"; 330 | $fa-var-gitlab: "\f296"; 331 | $fa-var-gittip: "\f184"; 332 | $fa-var-glass: "\f000"; 333 | $fa-var-glide: "\f2a5"; 334 | $fa-var-glide-g: "\f2a6"; 335 | $fa-var-globe: "\f0ac"; 336 | $fa-var-google: "\f1a0"; 337 | $fa-var-google-plus: "\f0d5"; 338 | $fa-var-google-plus-circle: "\f2b3"; 339 | $fa-var-google-plus-official: "\f2b3"; 340 | $fa-var-google-plus-square: "\f0d4"; 341 | $fa-var-google-wallet: "\f1ee"; 342 | $fa-var-graduation-cap: "\f19d"; 343 | $fa-var-gratipay: "\f184"; 344 | $fa-var-grav: "\f2d6"; 345 | $fa-var-group: "\f0c0"; 346 | $fa-var-h-square: "\f0fd"; 347 | $fa-var-hacker-news: "\f1d4"; 348 | $fa-var-hand-grab-o: "\f255"; 349 | $fa-var-hand-lizard-o: "\f258"; 350 | $fa-var-hand-o-down: "\f0a7"; 351 | $fa-var-hand-o-left: "\f0a5"; 352 | $fa-var-hand-o-right: "\f0a4"; 353 | $fa-var-hand-o-up: "\f0a6"; 354 | $fa-var-hand-paper-o: "\f256"; 355 | $fa-var-hand-peace-o: "\f25b"; 356 | $fa-var-hand-pointer-o: "\f25a"; 357 | $fa-var-hand-rock-o: "\f255"; 358 | $fa-var-hand-scissors-o: "\f257"; 359 | $fa-var-hand-spock-o: "\f259"; 360 | $fa-var-hand-stop-o: "\f256"; 361 | $fa-var-handshake-o: "\f2b5"; 362 | $fa-var-hard-of-hearing: "\f2a4"; 363 | $fa-var-hashtag: "\f292"; 364 | $fa-var-hdd-o: "\f0a0"; 365 | $fa-var-header: "\f1dc"; 366 | $fa-var-headphones: "\f025"; 367 | $fa-var-heart: "\f004"; 368 | $fa-var-heart-o: "\f08a"; 369 | $fa-var-heartbeat: "\f21e"; 370 | $fa-var-history: "\f1da"; 371 | $fa-var-home: "\f015"; 372 | $fa-var-hospital-o: "\f0f8"; 373 | $fa-var-hotel: "\f236"; 374 | $fa-var-hourglass: "\f254"; 375 | $fa-var-hourglass-1: "\f251"; 376 | $fa-var-hourglass-2: "\f252"; 377 | $fa-var-hourglass-3: "\f253"; 378 | $fa-var-hourglass-end: "\f253"; 379 | $fa-var-hourglass-half: "\f252"; 380 | $fa-var-hourglass-o: "\f250"; 381 | $fa-var-hourglass-start: "\f251"; 382 | $fa-var-houzz: "\f27c"; 383 | $fa-var-html5: "\f13b"; 384 | $fa-var-i-cursor: "\f246"; 385 | $fa-var-id-badge: "\f2c1"; 386 | $fa-var-id-card: "\f2c2"; 387 | $fa-var-id-card-o: "\f2c3"; 388 | $fa-var-ils: "\f20b"; 389 | $fa-var-image: "\f03e"; 390 | $fa-var-imdb: "\f2d8"; 391 | $fa-var-inbox: "\f01c"; 392 | $fa-var-indent: "\f03c"; 393 | $fa-var-industry: "\f275"; 394 | $fa-var-info: "\f129"; 395 | $fa-var-info-circle: "\f05a"; 396 | $fa-var-inr: "\f156"; 397 | $fa-var-instagram: "\f16d"; 398 | $fa-var-institution: "\f19c"; 399 | $fa-var-internet-explorer: "\f26b"; 400 | $fa-var-intersex: "\f224"; 401 | $fa-var-ioxhost: "\f208"; 402 | $fa-var-italic: "\f033"; 403 | $fa-var-joomla: "\f1aa"; 404 | $fa-var-jpy: "\f157"; 405 | $fa-var-jsfiddle: "\f1cc"; 406 | $fa-var-key: "\f084"; 407 | $fa-var-keyboard-o: "\f11c"; 408 | $fa-var-krw: "\f159"; 409 | $fa-var-language: "\f1ab"; 410 | $fa-var-laptop: "\f109"; 411 | $fa-var-lastfm: "\f202"; 412 | $fa-var-lastfm-square: "\f203"; 413 | $fa-var-leaf: "\f06c"; 414 | $fa-var-leanpub: "\f212"; 415 | $fa-var-legal: "\f0e3"; 416 | $fa-var-lemon-o: "\f094"; 417 | $fa-var-level-down: "\f149"; 418 | $fa-var-level-up: "\f148"; 419 | $fa-var-life-bouy: "\f1cd"; 420 | $fa-var-life-buoy: "\f1cd"; 421 | $fa-var-life-ring: "\f1cd"; 422 | $fa-var-life-saver: "\f1cd"; 423 | $fa-var-lightbulb-o: "\f0eb"; 424 | $fa-var-line-chart: "\f201"; 425 | $fa-var-link: "\f0c1"; 426 | $fa-var-linkedin: "\f0e1"; 427 | $fa-var-linkedin-square: "\f08c"; 428 | $fa-var-linode: "\f2b8"; 429 | $fa-var-linux: "\f17c"; 430 | $fa-var-list: "\f03a"; 431 | $fa-var-list-alt: "\f022"; 432 | $fa-var-list-ol: "\f0cb"; 433 | $fa-var-list-ul: "\f0ca"; 434 | $fa-var-location-arrow: "\f124"; 435 | $fa-var-lock: "\f023"; 436 | $fa-var-long-arrow-down: "\f175"; 437 | $fa-var-long-arrow-left: "\f177"; 438 | $fa-var-long-arrow-right: "\f178"; 439 | $fa-var-long-arrow-up: "\f176"; 440 | $fa-var-low-vision: "\f2a8"; 441 | $fa-var-magic: "\f0d0"; 442 | $fa-var-magnet: "\f076"; 443 | $fa-var-mail-forward: "\f064"; 444 | $fa-var-mail-reply: "\f112"; 445 | $fa-var-mail-reply-all: "\f122"; 446 | $fa-var-male: "\f183"; 447 | $fa-var-map: "\f279"; 448 | $fa-var-map-marker: "\f041"; 449 | $fa-var-map-o: "\f278"; 450 | $fa-var-map-pin: "\f276"; 451 | $fa-var-map-signs: "\f277"; 452 | $fa-var-mars: "\f222"; 453 | $fa-var-mars-double: "\f227"; 454 | $fa-var-mars-stroke: "\f229"; 455 | $fa-var-mars-stroke-h: "\f22b"; 456 | $fa-var-mars-stroke-v: "\f22a"; 457 | $fa-var-maxcdn: "\f136"; 458 | $fa-var-meanpath: "\f20c"; 459 | $fa-var-medium: "\f23a"; 460 | $fa-var-medkit: "\f0fa"; 461 | $fa-var-meetup: "\f2e0"; 462 | $fa-var-meh-o: "\f11a"; 463 | $fa-var-mercury: "\f223"; 464 | $fa-var-microchip: "\f2db"; 465 | $fa-var-microphone: "\f130"; 466 | $fa-var-microphone-slash: "\f131"; 467 | $fa-var-minus: "\f068"; 468 | $fa-var-minus-circle: "\f056"; 469 | $fa-var-minus-square: "\f146"; 470 | $fa-var-minus-square-o: "\f147"; 471 | $fa-var-mixcloud: "\f289"; 472 | $fa-var-mobile: "\f10b"; 473 | $fa-var-mobile-phone: "\f10b"; 474 | $fa-var-modx: "\f285"; 475 | $fa-var-money: "\f0d6"; 476 | $fa-var-moon-o: "\f186"; 477 | $fa-var-mortar-board: "\f19d"; 478 | $fa-var-motorcycle: "\f21c"; 479 | $fa-var-mouse-pointer: "\f245"; 480 | $fa-var-music: "\f001"; 481 | $fa-var-navicon: "\f0c9"; 482 | $fa-var-neuter: "\f22c"; 483 | $fa-var-newspaper-o: "\f1ea"; 484 | $fa-var-object-group: "\f247"; 485 | $fa-var-object-ungroup: "\f248"; 486 | $fa-var-odnoklassniki: "\f263"; 487 | $fa-var-odnoklassniki-square: "\f264"; 488 | $fa-var-opencart: "\f23d"; 489 | $fa-var-openid: "\f19b"; 490 | $fa-var-opera: "\f26a"; 491 | $fa-var-optin-monster: "\f23c"; 492 | $fa-var-outdent: "\f03b"; 493 | $fa-var-pagelines: "\f18c"; 494 | $fa-var-paint-brush: "\f1fc"; 495 | $fa-var-paper-plane: "\f1d8"; 496 | $fa-var-paper-plane-o: "\f1d9"; 497 | $fa-var-paperclip: "\f0c6"; 498 | $fa-var-paragraph: "\f1dd"; 499 | $fa-var-paste: "\f0ea"; 500 | $fa-var-pause: "\f04c"; 501 | $fa-var-pause-circle: "\f28b"; 502 | $fa-var-pause-circle-o: "\f28c"; 503 | $fa-var-paw: "\f1b0"; 504 | $fa-var-paypal: "\f1ed"; 505 | $fa-var-pencil: "\f040"; 506 | $fa-var-pencil-square: "\f14b"; 507 | $fa-var-pencil-square-o: "\f044"; 508 | $fa-var-percent: "\f295"; 509 | $fa-var-phone: "\f095"; 510 | $fa-var-phone-square: "\f098"; 511 | $fa-var-photo: "\f03e"; 512 | $fa-var-picture-o: "\f03e"; 513 | $fa-var-pie-chart: "\f200"; 514 | $fa-var-pied-piper: "\f2ae"; 515 | $fa-var-pied-piper-alt: "\f1a8"; 516 | $fa-var-pied-piper-pp: "\f1a7"; 517 | $fa-var-pinterest: "\f0d2"; 518 | $fa-var-pinterest-p: "\f231"; 519 | $fa-var-pinterest-square: "\f0d3"; 520 | $fa-var-plane: "\f072"; 521 | $fa-var-play: "\f04b"; 522 | $fa-var-play-circle: "\f144"; 523 | $fa-var-play-circle-o: "\f01d"; 524 | $fa-var-plug: "\f1e6"; 525 | $fa-var-plus: "\f067"; 526 | $fa-var-plus-circle: "\f055"; 527 | $fa-var-plus-square: "\f0fe"; 528 | $fa-var-plus-square-o: "\f196"; 529 | $fa-var-podcast: "\f2ce"; 530 | $fa-var-power-off: "\f011"; 531 | $fa-var-print: "\f02f"; 532 | $fa-var-product-hunt: "\f288"; 533 | $fa-var-puzzle-piece: "\f12e"; 534 | $fa-var-qq: "\f1d6"; 535 | $fa-var-qrcode: "\f029"; 536 | $fa-var-question: "\f128"; 537 | $fa-var-question-circle: "\f059"; 538 | $fa-var-question-circle-o: "\f29c"; 539 | $fa-var-quora: "\f2c4"; 540 | $fa-var-quote-left: "\f10d"; 541 | $fa-var-quote-right: "\f10e"; 542 | $fa-var-ra: "\f1d0"; 543 | $fa-var-random: "\f074"; 544 | $fa-var-ravelry: "\f2d9"; 545 | $fa-var-rebel: "\f1d0"; 546 | $fa-var-recycle: "\f1b8"; 547 | $fa-var-reddit: "\f1a1"; 548 | $fa-var-reddit-alien: "\f281"; 549 | $fa-var-reddit-square: "\f1a2"; 550 | $fa-var-refresh: "\f021"; 551 | $fa-var-registered: "\f25d"; 552 | $fa-var-remove: "\f00d"; 553 | $fa-var-renren: "\f18b"; 554 | $fa-var-reorder: "\f0c9"; 555 | $fa-var-repeat: "\f01e"; 556 | $fa-var-reply: "\f112"; 557 | $fa-var-reply-all: "\f122"; 558 | $fa-var-resistance: "\f1d0"; 559 | $fa-var-retweet: "\f079"; 560 | $fa-var-rmb: "\f157"; 561 | $fa-var-road: "\f018"; 562 | $fa-var-rocket: "\f135"; 563 | $fa-var-rotate-left: "\f0e2"; 564 | $fa-var-rotate-right: "\f01e"; 565 | $fa-var-rouble: "\f158"; 566 | $fa-var-rss: "\f09e"; 567 | $fa-var-rss-square: "\f143"; 568 | $fa-var-rub: "\f158"; 569 | $fa-var-ruble: "\f158"; 570 | $fa-var-rupee: "\f156"; 571 | $fa-var-s15: "\f2cd"; 572 | $fa-var-safari: "\f267"; 573 | $fa-var-save: "\f0c7"; 574 | $fa-var-scissors: "\f0c4"; 575 | $fa-var-scribd: "\f28a"; 576 | $fa-var-search: "\f002"; 577 | $fa-var-search-minus: "\f010"; 578 | $fa-var-search-plus: "\f00e"; 579 | $fa-var-sellsy: "\f213"; 580 | $fa-var-send: "\f1d8"; 581 | $fa-var-send-o: "\f1d9"; 582 | $fa-var-server: "\f233"; 583 | $fa-var-share: "\f064"; 584 | $fa-var-share-alt: "\f1e0"; 585 | $fa-var-share-alt-square: "\f1e1"; 586 | $fa-var-share-square: "\f14d"; 587 | $fa-var-share-square-o: "\f045"; 588 | $fa-var-shekel: "\f20b"; 589 | $fa-var-sheqel: "\f20b"; 590 | $fa-var-shield: "\f132"; 591 | $fa-var-ship: "\f21a"; 592 | $fa-var-shirtsinbulk: "\f214"; 593 | $fa-var-shopping-bag: "\f290"; 594 | $fa-var-shopping-basket: "\f291"; 595 | $fa-var-shopping-cart: "\f07a"; 596 | $fa-var-shower: "\f2cc"; 597 | $fa-var-sign-in: "\f090"; 598 | $fa-var-sign-language: "\f2a7"; 599 | $fa-var-sign-out: "\f08b"; 600 | $fa-var-signal: "\f012"; 601 | $fa-var-signing: "\f2a7"; 602 | $fa-var-simplybuilt: "\f215"; 603 | $fa-var-sitemap: "\f0e8"; 604 | $fa-var-skyatlas: "\f216"; 605 | $fa-var-skype: "\f17e"; 606 | $fa-var-slack: "\f198"; 607 | $fa-var-sliders: "\f1de"; 608 | $fa-var-slideshare: "\f1e7"; 609 | $fa-var-smile-o: "\f118"; 610 | $fa-var-snapchat: "\f2ab"; 611 | $fa-var-snapchat-ghost: "\f2ac"; 612 | $fa-var-snapchat-square: "\f2ad"; 613 | $fa-var-snowflake-o: "\f2dc"; 614 | $fa-var-soccer-ball-o: "\f1e3"; 615 | $fa-var-sort: "\f0dc"; 616 | $fa-var-sort-alpha-asc: "\f15d"; 617 | $fa-var-sort-alpha-desc: "\f15e"; 618 | $fa-var-sort-amount-asc: "\f160"; 619 | $fa-var-sort-amount-desc: "\f161"; 620 | $fa-var-sort-asc: "\f0de"; 621 | $fa-var-sort-desc: "\f0dd"; 622 | $fa-var-sort-down: "\f0dd"; 623 | $fa-var-sort-numeric-asc: "\f162"; 624 | $fa-var-sort-numeric-desc: "\f163"; 625 | $fa-var-sort-up: "\f0de"; 626 | $fa-var-soundcloud: "\f1be"; 627 | $fa-var-space-shuttle: "\f197"; 628 | $fa-var-spinner: "\f110"; 629 | $fa-var-spoon: "\f1b1"; 630 | $fa-var-spotify: "\f1bc"; 631 | $fa-var-square: "\f0c8"; 632 | $fa-var-square-o: "\f096"; 633 | $fa-var-stack-exchange: "\f18d"; 634 | $fa-var-stack-overflow: "\f16c"; 635 | $fa-var-star: "\f005"; 636 | $fa-var-star-half: "\f089"; 637 | $fa-var-star-half-empty: "\f123"; 638 | $fa-var-star-half-full: "\f123"; 639 | $fa-var-star-half-o: "\f123"; 640 | $fa-var-star-o: "\f006"; 641 | $fa-var-steam: "\f1b6"; 642 | $fa-var-steam-square: "\f1b7"; 643 | $fa-var-step-backward: "\f048"; 644 | $fa-var-step-forward: "\f051"; 645 | $fa-var-stethoscope: "\f0f1"; 646 | $fa-var-sticky-note: "\f249"; 647 | $fa-var-sticky-note-o: "\f24a"; 648 | $fa-var-stop: "\f04d"; 649 | $fa-var-stop-circle: "\f28d"; 650 | $fa-var-stop-circle-o: "\f28e"; 651 | $fa-var-street-view: "\f21d"; 652 | $fa-var-strikethrough: "\f0cc"; 653 | $fa-var-stumbleupon: "\f1a4"; 654 | $fa-var-stumbleupon-circle: "\f1a3"; 655 | $fa-var-subscript: "\f12c"; 656 | $fa-var-subway: "\f239"; 657 | $fa-var-suitcase: "\f0f2"; 658 | $fa-var-sun-o: "\f185"; 659 | $fa-var-superpowers: "\f2dd"; 660 | $fa-var-superscript: "\f12b"; 661 | $fa-var-support: "\f1cd"; 662 | $fa-var-table: "\f0ce"; 663 | $fa-var-tablet: "\f10a"; 664 | $fa-var-tachometer: "\f0e4"; 665 | $fa-var-tag: "\f02b"; 666 | $fa-var-tags: "\f02c"; 667 | $fa-var-tasks: "\f0ae"; 668 | $fa-var-taxi: "\f1ba"; 669 | $fa-var-telegram: "\f2c6"; 670 | $fa-var-television: "\f26c"; 671 | $fa-var-tencent-weibo: "\f1d5"; 672 | $fa-var-terminal: "\f120"; 673 | $fa-var-text-height: "\f034"; 674 | $fa-var-text-width: "\f035"; 675 | $fa-var-th: "\f00a"; 676 | $fa-var-th-large: "\f009"; 677 | $fa-var-th-list: "\f00b"; 678 | $fa-var-themeisle: "\f2b2"; 679 | $fa-var-thermometer: "\f2c7"; 680 | $fa-var-thermometer-0: "\f2cb"; 681 | $fa-var-thermometer-1: "\f2ca"; 682 | $fa-var-thermometer-2: "\f2c9"; 683 | $fa-var-thermometer-3: "\f2c8"; 684 | $fa-var-thermometer-4: "\f2c7"; 685 | $fa-var-thermometer-empty: "\f2cb"; 686 | $fa-var-thermometer-full: "\f2c7"; 687 | $fa-var-thermometer-half: "\f2c9"; 688 | $fa-var-thermometer-quarter: "\f2ca"; 689 | $fa-var-thermometer-three-quarters: "\f2c8"; 690 | $fa-var-thumb-tack: "\f08d"; 691 | $fa-var-thumbs-down: "\f165"; 692 | $fa-var-thumbs-o-down: "\f088"; 693 | $fa-var-thumbs-o-up: "\f087"; 694 | $fa-var-thumbs-up: "\f164"; 695 | $fa-var-ticket: "\f145"; 696 | $fa-var-times: "\f00d"; 697 | $fa-var-times-circle: "\f057"; 698 | $fa-var-times-circle-o: "\f05c"; 699 | $fa-var-times-rectangle: "\f2d3"; 700 | $fa-var-times-rectangle-o: "\f2d4"; 701 | $fa-var-tint: "\f043"; 702 | $fa-var-toggle-down: "\f150"; 703 | $fa-var-toggle-left: "\f191"; 704 | $fa-var-toggle-off: "\f204"; 705 | $fa-var-toggle-on: "\f205"; 706 | $fa-var-toggle-right: "\f152"; 707 | $fa-var-toggle-up: "\f151"; 708 | $fa-var-trademark: "\f25c"; 709 | $fa-var-train: "\f238"; 710 | $fa-var-transgender: "\f224"; 711 | $fa-var-transgender-alt: "\f225"; 712 | $fa-var-trash: "\f1f8"; 713 | $fa-var-trash-o: "\f014"; 714 | $fa-var-tree: "\f1bb"; 715 | $fa-var-trello: "\f181"; 716 | $fa-var-tripadvisor: "\f262"; 717 | $fa-var-trophy: "\f091"; 718 | $fa-var-truck: "\f0d1"; 719 | $fa-var-try: "\f195"; 720 | $fa-var-tty: "\f1e4"; 721 | $fa-var-tumblr: "\f173"; 722 | $fa-var-tumblr-square: "\f174"; 723 | $fa-var-turkish-lira: "\f195"; 724 | $fa-var-tv: "\f26c"; 725 | $fa-var-twitch: "\f1e8"; 726 | $fa-var-twitter: "\f099"; 727 | $fa-var-twitter-square: "\f081"; 728 | $fa-var-umbrella: "\f0e9"; 729 | $fa-var-underline: "\f0cd"; 730 | $fa-var-undo: "\f0e2"; 731 | $fa-var-universal-access: "\f29a"; 732 | $fa-var-university: "\f19c"; 733 | $fa-var-unlink: "\f127"; 734 | $fa-var-unlock: "\f09c"; 735 | $fa-var-unlock-alt: "\f13e"; 736 | $fa-var-unsorted: "\f0dc"; 737 | $fa-var-upload: "\f093"; 738 | $fa-var-usb: "\f287"; 739 | $fa-var-usd: "\f155"; 740 | $fa-var-user: "\f007"; 741 | $fa-var-user-circle: "\f2bd"; 742 | $fa-var-user-circle-o: "\f2be"; 743 | $fa-var-user-md: "\f0f0"; 744 | $fa-var-user-o: "\f2c0"; 745 | $fa-var-user-plus: "\f234"; 746 | $fa-var-user-secret: "\f21b"; 747 | $fa-var-user-times: "\f235"; 748 | $fa-var-users: "\f0c0"; 749 | $fa-var-vcard: "\f2bb"; 750 | $fa-var-vcard-o: "\f2bc"; 751 | $fa-var-venus: "\f221"; 752 | $fa-var-venus-double: "\f226"; 753 | $fa-var-venus-mars: "\f228"; 754 | $fa-var-viacoin: "\f237"; 755 | $fa-var-viadeo: "\f2a9"; 756 | $fa-var-viadeo-square: "\f2aa"; 757 | $fa-var-video-camera: "\f03d"; 758 | $fa-var-vimeo: "\f27d"; 759 | $fa-var-vimeo-square: "\f194"; 760 | $fa-var-vine: "\f1ca"; 761 | $fa-var-vk: "\f189"; 762 | $fa-var-volume-control-phone: "\f2a0"; 763 | $fa-var-volume-down: "\f027"; 764 | $fa-var-volume-off: "\f026"; 765 | $fa-var-volume-up: "\f028"; 766 | $fa-var-warning: "\f071"; 767 | $fa-var-wechat: "\f1d7"; 768 | $fa-var-weibo: "\f18a"; 769 | $fa-var-weixin: "\f1d7"; 770 | $fa-var-whatsapp: "\f232"; 771 | $fa-var-wheelchair: "\f193"; 772 | $fa-var-wheelchair-alt: "\f29b"; 773 | $fa-var-wifi: "\f1eb"; 774 | $fa-var-wikipedia-w: "\f266"; 775 | $fa-var-window-close: "\f2d3"; 776 | $fa-var-window-close-o: "\f2d4"; 777 | $fa-var-window-maximize: "\f2d0"; 778 | $fa-var-window-minimize: "\f2d1"; 779 | $fa-var-window-restore: "\f2d2"; 780 | $fa-var-windows: "\f17a"; 781 | $fa-var-won: "\f159"; 782 | $fa-var-wordpress: "\f19a"; 783 | $fa-var-wpbeginner: "\f297"; 784 | $fa-var-wpexplorer: "\f2de"; 785 | $fa-var-wpforms: "\f298"; 786 | $fa-var-wrench: "\f0ad"; 787 | $fa-var-xing: "\f168"; 788 | $fa-var-xing-square: "\f169"; 789 | $fa-var-y-combinator: "\f23b"; 790 | $fa-var-y-combinator-square: "\f1d4"; 791 | $fa-var-yahoo: "\f19e"; 792 | $fa-var-yc: "\f23b"; 793 | $fa-var-yc-square: "\f1d4"; 794 | $fa-var-yelp: "\f1e9"; 795 | $fa-var-yen: "\f157"; 796 | $fa-var-yoast: "\f2b1"; 797 | $fa-var-youtube: "\f167"; 798 | $fa-var-youtube-play: "\f16a"; 799 | $fa-var-youtube-square: "\f166"; 800 | 801 | --------------------------------------------------------------------------------