{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?7e02","webpack:///./src/store/user-settings.ts","webpack:///./src/models/trajectory_node.ts","webpack:///./src/models/trajectory.ts","webpack:///./src/store/mission-animation.ts","webpack:///./src/store/index.ts","webpack:///./src/scene_builders/resource-tracker.ts","webpack:///./src/components/Loading.vue?ba1d","webpack:///./src/components/Loading.vue","webpack:///./src/components/Loading.vue?062d","webpack:///./src/components/Loading.vue?2b2d","webpack:///./src/components/Header.vue?f5b1","webpack:///./src/components/Loading.vue?02f4","webpack:///./src/models/animation_state.ts","webpack:///./src/App.vue?ef32","webpack:///./src/components/Header.vue?b1f8","webpack:///./src/components/Header.vue","webpack:///./src/components/Header.vue?6808","webpack:///./src/components/Header.vue?8acd","webpack:///./src/App.vue","webpack:///./src/App.vue?0ab4","webpack:///./src/App.vue?bff9","webpack:///./src/views/Home.vue?2ab4","webpack:///./src/components/home/ResultsList.vue?b416","webpack:///./src/components/home/ResultsList.vue","webpack:///./src/components/home/ResultsList.vue?747c","webpack:///./src/components/home/ResultsList.vue?712b","webpack:///./src/views/Home.vue","webpack:///./src/views/Home.vue?2d60","webpack:///./src/views/Home.vue?c853","webpack:///./src/router/index.ts","webpack:///./src/main.ts","webpack:///./src/models/probe.ts","webpack:///./src/models/spherical_body.ts","webpack:///./src/models/asteroid.ts","webpack:///./src/config.ts","webpack:///./src/components/home/ResultsList.vue?7d0e"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","Data","background","probeSizeMultiple","bodySizeMultiple","markerSizeMultiple","asteroidSizeMultiple","planetTrajectoryColor","probeTrajectoryColor","asteroidTrajectoryColor","probeColor","markerColor","cameraTracksProbe","LastUpdatedDate","Date","settings","this","userSettings","context","commit","dispatch","log","localStorage","setItem","JSON","stringify","settingsJson","getItem","parse","rawError","namespaced","x","y","z","vector","id","csv","pathColor","nodes","index","partialIndex","showingPastOnly","isLastNode","material","color","linewidth","points","Array","line","val","split","Number","node","geometry","setFromPoints","currentNode","setDrawRange","store","state","MissionAnimation","AnimationState","rewind","paused","playing","playbackSpeed","PlaybackSpeed","Math","floor","frameskip","max","deltaT","nextNode","getNextNode","scene","add","resultsUrl","TrajectoryByBodyId","Loading","light","lastUpdatedDate","url","trajectoryByBodyId","animationState","loading","a","response","row","trim","includes","bodyId","config","ZeroDate","backgrounds","UserSettings","use","Store","ResourceTracker","resources","Set","resource","delete","dispose","clear","render","_vm","_h","$createElement","_c","_self","staticClass","_e","staticRenderFns","$store","component","attrs","$route","_v","_m","components","Header","_l","_s","createdAt","path","results","uri","resultsListUrl","headers","Accept","EnumerationResults","Blobs","Blob","blob","Name","Properties","Url","urlBase64","btoa","ResultsList","routes","props","router","productionTip","h","$mount","colour","scale","trajectory","texture","gltfScene","LoadGLTF","track","showPastOnly","load","animateAndGetTime","position","animate","body","sphere","getters","lookAt","GLTFLoader","gltf","size","set","traverse","child","mesh","catch","radius","rotationSpeed","textureFile","isAnimating","rotation","getNodeForCurrentTime","loadTexture","sphereGeometry","SphericalBody","WIDTH_SEGMENTS","HEIGHT_SEGMENTS","sphereMaterial","map","PI","BaseUrl","pathsUrl","missionsUrl","bodiesByNAIFCodes","bodies","markerSize","cameraStartPosition","binarySpiceFiles"],"mappings":"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","file":"js/app.a453e75e.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-64f78a9c\":\"7eef39f8\",\"chunk-9371e0e8\":\"6cf746a4\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-64f78a9c\":1,\"chunk-9371e0e8\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-64f78a9c\":\"62d5c4e1\",\"chunk-9371e0e8\":\"aee690f3\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","\r\nimport { VuexModule, Module, Mutation, Action } from 'vuex-module-decorators';\r\n\r\n//https://bezkoder.com/vuex-typescript-jwt-auth/\r\n\r\n\r\nimport UserSettingValues from './user-setting-values';\r\n\r\n@Module({ namespaced: true })\r\nclass UserSettings extends VuexModule {\r\n\r\n public Data: UserSettingValues = {\r\n background: 'Milky Way',\r\n probeSizeMultiple: 10,\r\n bodySizeMultiple: 10,\r\n markerSizeMultiple: 10,\r\n asteroidSizeMultiple: 10,\r\n planetTrajectoryColor: 'blue',\r\n probeTrajectoryColor: 'white',\r\n asteroidTrajectoryColor: 'red',\r\n probeColor: 'white',\r\n markerColor: 'green',\r\n cameraTracksProbe: true\r\n };\r\n\r\n // Brightness\r\n public LastUpdatedDate = new Date();\r\n\r\n @Mutation\r\n public Set(settings: UserSettingValues) {\r\n this.Data.background = settings.background ?? 'Milky Way';\r\n this.Data.probeSizeMultiple = settings.probeSizeMultiple ?? 10;\r\n this.Data.bodySizeMultiple = settings.bodySizeMultiple ?? 10;\r\n this.Data.markerSizeMultiple = settings.markerSizeMultiple ?? 10;\r\n this.Data.asteroidSizeMultiple = settings.asteroidSizeMultiple ?? 10;\r\n this.Data.planetTrajectoryColor = settings.planetTrajectoryColor ?? 'blue';\r\n this.Data.asteroidTrajectoryColor = settings.asteroidTrajectoryColor ?? 'red';\r\n this.Data.probeColor = settings.probeColor ?? 'white';\r\n this.Data.markerColor = settings.markerColor ?? 'green';\r\n this.Data.cameraTracksProbe = settings.cameraTracksProbe ?? true;\r\n }\r\n\r\n @Mutation\r\n public UpdateDate() {\r\n this.LastUpdatedDate = new Date();\r\n }\r\n\r\n @Action({ rawError: true })\r\n public async Update(userSettings: UserSettingValues) {\r\n\r\n this.context.commit('Set', userSettings);\r\n await this.context.dispatch('Save');\r\n }\r\n\r\n @Action({ rawError: true })\r\n public async Save() {\r\n window.console.log(`Saving settings`);\r\n // Make sure local storage is done asynchronously\r\n\r\n await null;\r\n this.context.commit('UpdateDate');\r\n window.localStorage.setItem(`settings`, JSON.stringify(this.Data));\r\n }\r\n\r\n @Action({ rawError: true })\r\n public Load() {\r\n window.console.log(`Load settings`);\r\n const settingsJson = window.localStorage.getItem(`settings`);\r\n if (settingsJson) {\r\n this.context.commit('Set', JSON.parse(settingsJson));\r\n }\r\n }\r\n}\r\n\r\nexport default UserSettings\r\n\r\n\r\n\r\n","import * as Three from 'three'\r\n\r\nexport default class TrajectoryNode {\r\n public vector: Three.Vector3;\r\n public t = 0;\r\n\r\n constructor(t: number, x: number, y: number, z: number) {\r\n this.t = t;\r\n this.vector = new Three.Vector3(x, y, z);\r\n }\r\n\r\n public toString(): string {\r\n return `t:${this.t}, x:${this.vector.x}, y:${this.vector.y}, z:${this.vector.z}, `\r\n }\r\n}","import * as Three from 'three'\r\nimport TrajectoryNode from './trajectory_node';\r\nimport store from '@/store';\r\nimport AnimationState from './animation_state';\r\n\r\nexport default class Trajectory {\r\n public id: string;\r\n public nodes: TrajectoryNode[] = []\r\n public index = 0;\r\n public partialIndex = 0;\r\n public line: Three.Line;\r\n public currentNode: TrajectoryNode;\r\n public showingPastOnly = false;\r\n\r\n public isLastNode = false;\r\n\r\n constructor(id: string, csv: string[], pathColor = 'white') {\r\n this.id = id;\r\n const material = new Three.LineBasicMaterial( { color: pathColor, linewidth: 1.0 } );\r\n const points = new Array();\r\n\r\n for (const line of csv) {\r\n const val = line.split(',');\r\n const t = Number(val[0]);\r\n const x = Number(val[1]);\r\n const y = Number(val[2]);\r\n const z = Number(val[3]);\r\n const node = new TrajectoryNode(t, x, y, z);\r\n\r\n points.push(node.vector);\r\n this.nodes.push(node);\r\n }\r\n\r\n const geometry = new Three.BufferGeometry()\r\n .setFromPoints(points);\r\n this.line = new Three.Line(geometry, material);\r\n\r\n if (this.nodes.length > 0) {\r\n this.currentNode = this.nodes[0];\r\n } else {\r\n this.currentNode = new TrajectoryNode(0, 0, 0, 0);\r\n }\r\n }\r\n\r\n public showPastOnly() {\r\n this.showingPastOnly = true;\r\n const geometry = this.line.geometry as THREE.BufferGeometry;\r\n geometry.setDrawRange(0, 0)\r\n }\r\n\r\n public getNextNode(): TrajectoryNode {\r\n\r\n switch(store.state.MissionAnimation.AnimationState) {\r\n case AnimationState.rewind: {\r\n this.index = 0;\r\n this.partialIndex = 0;\r\n this.isLastNode = false;\r\n break;\r\n }\r\n case AnimationState.paused: {\r\n break;\r\n }\r\n case AnimationState.playing: {\r\n const playbackSpeed = store.state.MissionAnimation.PlaybackSpeed;\r\n if (this.index < this.nodes.length - playbackSpeed - 1) {\r\n this.partialIndex += playbackSpeed;\r\n this.index = Math.floor(this.partialIndex); \r\n } else {\r\n this.isLastNode = true;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n const node = this.nodes[this.index];\r\n \r\n this.currentNode = node;\r\n\r\n return node;\r\n }\r\n\r\n public getNodeForCurrentTime(): TrajectoryNode {\r\n\r\n if (store.state.MissionAnimation.AnimationState === AnimationState.rewind) {\r\n this.index = 0;\r\n this.partialIndex = 0;\r\n const node = this.nodes[this.index];\r\n this.currentNode = node;\r\n return this.currentNode;\r\n }\r\n\r\n const frameskip = Math.floor(Math.max(1, store.state.MissionAnimation.PlaybackSpeed));\r\n\r\n if (this.nodes.length < this.index + frameskip + 1) {\r\n this.isLastNode = true;\r\n return this.currentNode;\r\n }\r\n\r\n const t = store.state.MissionAnimation.t;\r\n const deltaT = store.state.MissionAnimation.deltaT;\r\n\r\n // Check next node is correct time\r\n const nextNode = this.nodes[this.index + frameskip];\r\n if (nextNode.t <= t + deltaT * frameskip\r\n && nextNode.t >= t - deltaT * frameskip) {\r\n\r\n return this.getNextNode();\r\n }\r\n\r\n // Find closest node\r\n if (this.currentNode.t < t + deltaT * frameskip) {\r\n for (let i = this.index; i < this.nodes.length; i++) {\r\n \r\n if (this.nodes[i].t >= t) {\r\n this.index = Math.max(0, i - frameskip);\r\n this.partialIndex = this.index\r\n this.currentNode = this.nodes[this.index];\r\n return this.currentNode;\r\n }\r\n }\r\n\r\n window.console.error(`no node found for state t: ${store.state.t}`);\r\n }\r\n\r\n window.console.log(2);\r\n return this.currentNode;\r\n }\r\n\r\n public animate() {\r\n if (this.showingPastOnly) {\r\n const geometry = this.line.geometry as THREE.BufferGeometry;\r\n geometry.setDrawRange(0, this.index);\r\n }\r\n }\r\n\r\n public load(scene: Three.Scene) {\r\n scene.add(this.line);\r\n }\r\n}","\r\nimport { VuexModule, Module, Mutation, Action } from 'vuex-module-decorators';\r\nimport Trajectory from '@/models/trajectory';\r\nimport AnimationState from '@/models/animation_state';\r\nimport config from '@/config';\r\nimport axios from 'axios';\r\nimport { AxiosResponse } from 'axios';\r\nimport store from '@/store';\r\n\r\n@Module({ namespaced: true })\r\nclass MissionAnimation extends VuexModule {\r\n\r\n public resultsUrl = '';\r\n public TrajectoryByBodyId: { [id: string]: Trajectory } = {};\r\n public t = 0;\r\n public deltaT = 1;\r\n public AnimationState = AnimationState.paused;\r\n public Loading = true;\r\n public PlaybackSpeed = 1;\r\n\r\n // Brightness\r\n public light = 3.2;\r\n public lastUpdatedDate = new Date();\r\n\r\n public get tDate(): Date {\r\n return new Date((config.ZeroDate + this.t) * 1000);\r\n }\r\n\r\n public get IsAnimating(): boolean { \r\n return this.AnimationState === AnimationState.playing;\r\n }\r\n\r\n public get BackgroundPath(): string {\r\n return config.backgrounds[store.state.UserSettings.Data.background];\r\n }\r\n\r\n\r\n @Mutation\r\n public SetResultsUrl(url: string) {\r\n window.console.log(`SetResultsUrl(${url}) mutation called`);\r\n this.resultsUrl = url;\r\n }\r\n\r\n @Mutation\r\n public SetTrajectoryByBodyId(trajectoryByBodyId: { [id: string]: Trajectory }) {\r\n window.console.log('setTrajectoryByBodyId() mutation called');\r\n this.TrajectoryByBodyId = trajectoryByBodyId;\r\n }\r\n\r\n @Mutation\r\n public SetT(t: number) {\r\n this.t = t;\r\n }\r\n\r\n @Mutation\r\n public SetDeltaT(deltaT: number) {\r\n this.deltaT = deltaT;\r\n }\r\n\r\n @Mutation\r\n public SetAnimationState(animationState: AnimationState) {\r\n window.console.log(`SetAnimationState(animationState: ${animationState}) mutation called`);\r\n this.AnimationState = animationState;\r\n }\r\n\r\n @Mutation\r\n public SetLoading(loading: boolean) {\r\n this.Loading = loading;\r\n }\r\n\r\n @Mutation\r\n public SetPlaybackSpeed(playbackSpeed: number) {\r\n this.PlaybackSpeed = playbackSpeed;\r\n }\r\n\r\n @Action({ rawError: true })\r\n public async UpdateResultsUrl(url: string) {\r\n window.console.log(`UpdateResultsUrl(url: ${url}) action called`);\r\n\r\n this.context.commit('SetResultsUrl', url);\r\n\r\n if (!url) {\r\n this.context.commit('SetTrajectoryByBodyId', {});\r\n }\r\n else {\r\n // Load settings\r\n await store.dispatch('UserSettings/Load');\r\n\r\n // refresh results data\r\n await this.context.dispatch('GetCsvResults');\r\n }\r\n }\r\n\r\n @Action({ rawError: true })\r\n public async GetCsvResults() {\r\n window.console.log('GetCsvResults() action called');\r\n\r\n const response = await axios.get(this.resultsUrl) as AxiosResponse;\r\n\r\n const data: { [id: string]: string[] } = {};\r\n const trajectoryByBodyId: { [id: string]: Trajectory } = {};\r\n\r\n let id = '';\r\n\r\n for (const row of response.data.split(\"\\n\")) {\r\n if (row && row.trim().length > 0) {\r\n if (!row.includes(',')) {\r\n id = row.trim();\r\n data[id] = new Array();\r\n } else {\r\n data[id].push(row);\r\n }\r\n }\r\n }\r\n\r\n for (const bodyId in data) {\r\n trajectoryByBodyId[bodyId] = new Trajectory(bodyId, data[bodyId]);\r\n }\r\n\r\n this.context.commit('SetTrajectoryByBodyId', trajectoryByBodyId);\r\n }\r\n\r\n @Action\r\n public UpdateT(t: number) {\r\n this.context.commit('SetT', t);\r\n }\r\n\r\n @Action\r\n public UpdateDeltaT(deltaT: number) {\r\n this.context.commit('SetDeltaT', deltaT);\r\n }\r\n\r\n @Action\r\n public UpdateAnimationState(animationState: AnimationState) {\r\n this.context.commit('SetAnimationState', animationState);\r\n }\r\n\r\n @Action\r\n public UpdateLoading(loading: boolean) {\r\n window.console.log(`UpdateLoading(loading: ${loading}) action called`);\r\n this.context.commit('SetLoading', loading);\r\n }\r\n\r\n @Action\r\n public async UpdatePlaybackSpeed(playbackSpeed: number) {\r\n window.console.log(`UpdatePlaybackSpeed(${playbackSpeed})`);\r\n this.context.commit('SetPlaybackSpeed', playbackSpeed);\r\n }\r\n}\r\n\r\nexport default MissionAnimation\r\n\r\n\r\n\r\n","import Vue from 'vue'\r\nimport Vuex from 'vuex'\r\nimport UserSettings from './user-settings';\r\nimport MissionAnimation from './mission-animation';\r\n\r\nVue.use(Vuex);\r\n\r\nexport default new Vuex.Store({\r\n\r\n modules: {\r\n UserSettings,\r\n MissionAnimation,\r\n }\r\n});\r\n","interface Disposable {\r\n dispose(): void;\r\n}\r\n\r\nexport default class ResourceTracker {\r\n static resources: Set;\r\n\r\n static init() {\r\n ResourceTracker.resources = new Set();\r\n }\r\n\r\n static track(resource: T): T {\r\n // eslint-disable-next-line\r\n if ('dispose' in resource as any) {\r\n ResourceTracker.resources.add(resource as unknown as Disposable);\r\n }\r\n return resource;\r\n }\r\n\r\n static untrack(resource: T): T {\r\n // eslint-disable-next-line\r\n if ('dispose' in resource as any) {\r\n ResourceTracker.resources.delete(resource as unknown as Disposable);\r\n }\r\n return resource;\r\n }\r\n\r\n\r\n static dispose() {\r\n for (const resource of ResourceTracker.resources) {\r\n window.console.log(`Disposing:`);\r\n window.console.log(resource);\r\n resource.dispose();\r\n }\r\n ResourceTracker.resources.clear();\r\n }\r\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.loading)?_c('div',{staticClass:\"loading\"}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\n@Component\r\nexport default class Loading extends Vue {\r\n\r\n public get loading(): boolean {\r\n return this.$store.state.MissionAnimation.Loading;\r\n }\r\n}\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Loading.vue?vue&type=template&id=afad1402&scoped=true&\"\nimport script from \"./Loading.vue?vue&type=script&lang=ts&\"\nexport * from \"./Loading.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Loading.vue?vue&type=style&index=0&id=afad1402&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"afad1402\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Header.vue?vue&type=style&index=0&id=5f4311e0&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Header.vue?vue&type=style&index=0&id=5f4311e0&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=style&index=0&id=afad1402&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=style&index=0&id=afad1402&scoped=true&lang=css&\"","enum AnimationState {\r\n playing,\r\n paused,\r\n rewind,\r\n}\r\n\r\nexport default AnimationState;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[(this.$route.name !== 'Animation')?_c('Header'):_vm._e(),(this.$route.name !== 'Animation')?_c('div',{attrs:{\"id\":\"nav\"}},[_c('router-link',{attrs:{\"to\":\"/\"}},[_vm._v(\"MISSIONS\")]),_c('router-link',{attrs:{\"to\":\"/about\"}},[_vm._v(\"ABOUT\")])],1):_vm._e(),_c('router-view')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"header\"},[_c('h1',[_vm._v(\"Adam Hibberd's Optimum Interplanetary Trajectory Software\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n components: {\r\n },\r\n})\r\nexport default class Header extends Vue { }\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Header.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Header.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Header.vue?vue&type=template&id=5f4311e0&scoped=true&\"\nimport script from \"./Header.vue?vue&type=script&lang=ts&\"\nexport * from \"./Header.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Header.vue?vue&type=style&index=0&id=5f4311e0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5f4311e0\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\nimport Header from '@/components/Header.vue';\r\n\r\n@Component({\r\n components: {\r\n Header\r\n },\r\n})\r\nexport default class App extends Vue { }\r\n\r\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=190352ab&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('ResultsList'),_c('Loading')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('table',{staticClass:\"pure-table pure-table-striped result-list\"},[_vm._m(0),_c('tbody',_vm._l((_vm.results),function(result){return _c('tr',{key:result.name},[_c('td',[_vm._v(_vm._s(result.name))]),_c('td',[_vm._v(_vm._s(result.createdAt))]),_c('td',[_c('span',{staticClass:\"tool\",attrs:{\"data-tip\":\"Play Mission Animation\"}},[_c('router-link',{staticClass:\"play\",attrs:{\"to\":{ path: (\"/animation/\" + (result.urlBase64)) }}},[_c('span',{staticClass:\"oi\",attrs:{\"data-glyph\":\"media-play\"}})])],1)])])}),0)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"Description\")]),_c('th',[_vm._v(\"Created At\")]),_c('th')])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\nimport store from '@/store';\r\nimport config from '@/config';\r\nimport axios from 'axios';\r\nimport { AxiosResponse } from 'axios';\r\nimport { parseString } from 'xml2js';\r\nimport Result from '@/models/results/result';\r\nimport 'open-iconic/font/css/open-iconic.css';\r\n\r\n@Component({\r\n components: {\r\n },\r\n})\r\nexport default class ResultsList extends Vue { \r\n\r\n public results: Result[] = [];\r\n\r\n protected async mounted() {\r\n store.dispatch('MissionAnimation/UpdateLoading', true);\r\n this.results = [];\r\n const uri = `${config.resultsListUrl}`;\r\n const response = await axios.get(uri, {\r\n headers: {\r\n Accept: 'application/xml'\r\n }\r\n }) as AxiosResponse;\r\n parseString(response.data, (error, result) => {\r\n console.log('error', error);\r\n console.log('result', result);\r\n for (const blob of result.EnumerationResults.Blobs[0].Blob) {\r\n console.log('blob', blob);\r\n const result: Result = {\r\n name: blob.Name[0],\r\n createdAt: blob.Properties[0]['Last-Modified'][0],\r\n url: blob.Url[0],\r\n urlBase64: btoa(blob.Url[0])\r\n };\r\n\r\n this.results.push(result);\r\n }\r\n store.dispatch('MissionAnimation/UpdateLoading', false);\r\n });\r\n \r\n }\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultsList.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultsList.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ResultsList.vue?vue&type=template&id=0d6a5f1a&scoped=true&\"\nimport script from \"./ResultsList.vue?vue&type=script&lang=ts&\"\nexport * from \"./ResultsList.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ResultsList.vue?vue&type=style&index=0&id=0d6a5f1a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0d6a5f1a\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\nimport Loading from '@/components/Loading.vue';\r\nimport ResultsList from '@/components/home/ResultsList.vue';\r\n\r\n@Component({\r\n components: {\r\n ResultsList,\r\n Loading\r\n },\r\n})\r\nexport default class Home extends Vue { }\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=383dfcb2&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=ts&\"\nexport * from \"./Home.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"383dfcb2\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\r\nimport VueRouter, { RouteConfig } from 'vue-router'\r\nimport Home from '@/views/Home.vue'\r\n\r\nVue.use(VueRouter)\r\n\r\n const routes: Array = [\r\n {\r\n path: '/',\r\n name: 'Home',\r\n component: Home\r\n },\r\n {\r\n path: '/about',\r\n name: 'About',\r\n // route level code-splitting\r\n // this generates a separate chunk (about.[hash].js) for this route\r\n // which is lazy-loaded when the route is visited.\r\n component: () => import( '../views/About.vue')\r\n },\r\n {\r\n path: '/animation/:urlBase64',\r\n name: 'Animation',\r\n component: () => import('../views/Animation.vue'),\r\n props: true\r\n }\r\n]\r\n\r\nconst router = new VueRouter({\r\n routes\r\n})\r\n\r\nexport default router\r\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\r\n\r\nVue.config.productionTip = false\r\n\r\nnew Vue({\r\n router,\r\n store,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","import * as Three from 'three'\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\r\nimport IBody from './body';\r\nimport Trajectory from './trajectory';\r\nimport SphericalBody from './spherical_body';\r\nimport store from '@/store';\r\nimport AnimationState from './animation_state';\r\nimport ResourceTracker from '../scene_builders/resource-tracker';\r\nimport MissionAnimation from '@/store/mission-animation';\r\n\r\n\r\nexport default class Probe implements IBody{\r\n public id: string;\r\n public x: number;\r\n public y: number;\r\n public z: number;\r\n public scale: number;\r\n public colour: string;\r\n public trajectory: Trajectory | null = null;\r\n\r\n public texture: Three.Texture | null = null;\r\n private gltfScene: Three.Group | null = null;\r\n\r\n constructor(id: string,\r\n x: number,\r\n y: number,\r\n z: number,\r\n colour: string,\r\n scale: number) {\r\n this.id = id;\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n // Invert the object so that the lookat function makes probe look in opposite direction\r\n this.scale = -scale;\r\n this.colour = colour\r\n }\r\n\r\n\r\n public async load(scene: Three.Scene): Promise {\r\n window.console.log(`Probe.load()`)\r\n await this.LoadGLTF();\r\n\r\n const trajectoryByBodyId = (store.state.MissionAnimation as MissionAnimation).TrajectoryByBodyId\r\n\r\n if (this.id in trajectoryByBodyId) {\r\n this.trajectory = trajectoryByBodyId[this.id];\r\n this.trajectory.line.material = ResourceTracker.track(new Three.LineBasicMaterial({\r\n color: store.state.UserSettings.Data.probeTrajectoryColor\r\n }));\r\n\r\n this.trajectory.showPastOnly();\r\n this.trajectory.load(scene);\r\n\r\n this.x = this.trajectory.currentNode.vector.x;\r\n this.y = this.trajectory.currentNode.vector.y;\r\n this.z = this.trajectory.currentNode.vector.z;\r\n\r\n const deltaT = this.trajectory.nodes[1].t - this.trajectory.nodes[0].t;\r\n store.dispatch('MissionAnimation/UpdateDeltaT', deltaT);\r\n }\r\n\r\n if (this.gltfScene) {\r\n scene.add(this.gltfScene);\r\n }\r\n }\r\n\r\n public animate() {\r\n this.animateAndGetTime();\r\n }\r\n\r\n public animateAndGetTime(): number {\r\n if (this.gltfScene) {\r\n if (this.trajectory) {\r\n const node = this.trajectory.getNextNode();\r\n this.gltfScene.position.x = node.vector.x;\r\n this.gltfScene.position.y = node.vector.y;\r\n this.gltfScene.position.z = node.vector.z;\r\n\r\n if (this.trajectory.isLastNode) {\r\n store.dispatch('MissionAnimation/UpdateAnimationState', AnimationState.paused);\r\n }\r\n\r\n this.trajectory.animate();\r\n\r\n return node.t;\r\n }\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n public pointTowardsBody(body: SphericalBody) {\r\n\r\n if (this.gltfScene && body.sphere && store.getters['MissionAnimation/IsAnimating']) {\r\n this.gltfScene.lookAt(body.sphere.position);\r\n }\r\n }\r\n\r\n private async LoadGLTF(): Promise {\r\n const promise = await new Promise((resolve) => {\r\n\r\n new GLTFLoader().load('/assets/probe/scene.gltf', (gltf) => {\r\n\r\n ResourceTracker.track(gltf)\r\n const size = this.scale * store.state.UserSettings.Data.probeSizeMultiple;\r\n\r\n gltf.scene.scale.set(size, size, size);\r\n gltf.scene.position.x = this.x;\r\n gltf.scene.position.y = this.y;\r\n gltf.scene.position.z = this.z;\r\n this.gltfScene = ResourceTracker.track(gltf.scene);\r\n\r\n this.gltfScene.traverse((child) => {\r\n if (child instanceof Three.Mesh) {\r\n const mesh = child as Three.Mesh;\r\n \r\n // Texture is not showing up , so use basic colour\r\n mesh.material = ResourceTracker.track(new Three.MeshLambertMaterial({\r\n color: store.state.UserSettings.Data.probeColor,\r\n\r\n }));\r\n }\r\n });\r\n\r\n resolve();\r\n });\r\n })\r\n .catch(err => {throw err});\r\n \r\n return promise;\r\n }\r\n}","import * as Three from 'three'\r\nimport IBody from './body';\r\nimport Trajectory from './trajectory';\r\nimport store from '@/store';\r\nimport ResourceTracker from '../scene_builders/resource-tracker';\r\nimport MissionAnimation from '@/store/mission-animation';\r\n\r\n\r\nexport default class SphericalBody implements IBody{\r\n // Decentish smoothness and performance\r\n public static WIDTH_SEGMENTS = 24;\r\n public static HEIGHT_SEGMENTS = 16;\r\n\r\n public id: string;\r\n public x: number;\r\n public y: number;\r\n public z: number;\r\n public texture: Three.Texture | null = null;\r\n public radius: number;\r\n public trajectory: Trajectory | null = null;\r\n public sphere: Three.Mesh | null = null;\r\n\r\n private textureFile: string;\r\n private rotationSpeed: number;\r\n\r\n constructor(id: string,\r\n x: number,\r\n y: number,\r\n z: number,\r\n radius: number,\r\n texture: string,\r\n rotationSpeed: number) {\r\n this.id = id;\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n this.radius = radius;\r\n this.textureFile = texture;\r\n this.rotationSpeed = rotationSpeed;\r\n }\r\n\r\n public animate() {\r\n if (this.sphere) {\r\n\r\n if (store.getters.isAnimating) {\r\n this.sphere.rotation.y += this.rotationSpeed;\r\n }\r\n\r\n if (this.trajectory) {\r\n const node = this.trajectory.getNodeForCurrentTime();\r\n this.sphere.position.x = node.vector.x;\r\n this.sphere.position.y = node.vector.y;\r\n this.sphere.position.z = node.vector.z;\r\n this.trajectory.animate();\r\n }\r\n }\r\n }\r\n\r\n\r\n public async load(scene: Three.Scene): Promise {\r\n window.console.log(`SphericalBody.load()`)\r\n await this.loadTexture();\r\n\r\n const trajectoryByBodyId = (store.state.MissionAnimation as MissionAnimation).TrajectoryByBodyId\r\n\r\n if (this.id in trajectoryByBodyId) {\r\n this.trajectory = trajectoryByBodyId[this.id];\r\n this.trajectory.line.material = ResourceTracker.track(new Three.LineBasicMaterial({ \r\n color: store.state.UserSettings.Data.planetTrajectoryColor\r\n }));\r\n\r\n this.trajectory.load(scene);\r\n\r\n this.x = this.trajectory.currentNode.vector.x;\r\n this.y = this.trajectory.currentNode.vector.y;\r\n this.z = this.trajectory.currentNode.vector.z;\r\n }\r\n\r\n const size = this.radius * store.state.UserSettings.Data.bodySizeMultiple;\r\n\r\n const sphereGeometry = ResourceTracker.track(new Three.SphereGeometry(\r\n size, SphericalBody.WIDTH_SEGMENTS, SphericalBody.HEIGHT_SEGMENTS)); \r\n\r\n const sphereMaterial = ResourceTracker.track(new Three.MeshBasicMaterial( {map: this.texture} )); \r\n this.sphere = ResourceTracker.track(new Three.Mesh(sphereGeometry, sphereMaterial));\r\n this.sphere.position.set(this.x, this.y, this.z);\r\n this.sphere.rotation.x += Math.PI / 2;\r\n\r\n scene.add(this.sphere);\r\n }\r\n\r\n private async loadTexture(): Promise {\r\n const promise = await new Promise((resolve) => {\r\n\r\n new Three.TextureLoader().load(this.textureFile, (texture) => {\r\n this.texture = ResourceTracker.track(texture);\r\n resolve();\r\n });\r\n })\r\n .catch(err => {throw err});\r\n \r\n return promise;\r\n }\r\n}","import * as Three from 'three'\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\r\nimport IBody from './body';\r\nimport Trajectory from './trajectory';\r\nimport store from '@/store';\r\nimport ResourceTracker from '../scene_builders/resource-tracker';\r\nimport MissionAnimation from '@/store/mission-animation';\r\n\r\n\r\nexport default class Asteroid implements IBody{\r\n public id: string;\r\n public x: number;\r\n public y: number;\r\n public z: number;\r\n public scale: number;\r\n public trajectory: Trajectory | null = null;\r\n\r\n private gltfScene: Three.Group | null = null;\r\n\r\n constructor(id: string,\r\n x: number,\r\n y: number,\r\n z: number,\r\n scale: number) {\r\n this.id = id;\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n this.scale = scale;\r\n }\r\n\r\n public async load(scene: Three.Scene): Promise {\r\n window.console.log(`Asteroid.load()`)\r\n\r\n await this.LoadGLTF();\r\n\r\n\r\n const trajectoryByBodyId = (store.state.MissionAnimation as MissionAnimation).TrajectoryByBodyId\r\n\r\n if (this.id in trajectoryByBodyId) {\r\n this.trajectory = trajectoryByBodyId[this.id];\r\n \r\n this.trajectory.line.material = ResourceTracker.track(new Three.LineBasicMaterial({ \r\n color: store.state.UserSettings.Data.asteroidTrajectoryColor \r\n }));\r\n\r\n this.trajectory.load(scene);\r\n\r\n this.x = this.trajectory.currentNode.vector.x;\r\n this.y = this.trajectory.currentNode.vector.y;\r\n this.z = this.trajectory.currentNode.vector.z;\r\n }\r\n\r\n if (this.gltfScene) {\r\n scene.add(this.gltfScene);\r\n }\r\n }\r\n\r\n public animate() {\r\n if (this.gltfScene) {\r\n\r\n\r\n if (store.getters['MissionAnimation/IsAnimating']) {\r\n this.gltfScene.rotation.y += 0.02;\r\n }\r\n\r\n if (this.trajectory) {\r\n const node = this.trajectory.getNodeForCurrentTime();\r\n this.gltfScene.position.x = node.vector.x;\r\n this.gltfScene.position.y = node.vector.y;\r\n this.gltfScene.position.z = node.vector.z;\r\n this.trajectory.animate();\r\n }\r\n }\r\n }\r\n\r\n private async LoadGLTF(): Promise {\r\n const promise = await new Promise((resolve) => {\r\n\r\n new GLTFLoader().load('/assets/asteroid/scene.gltf', (gltf) => {\r\n ResourceTracker.track(gltf)\r\n const size = this.scale * store.state.UserSettings.Data.asteroidSizeMultiple;\r\n gltf.scene.scale.set(size, size, size);\r\n gltf.scene.position.x = this.x;\r\n gltf.scene.position.y = this.y;\r\n gltf.scene.position.z = this.z;\r\n \r\n this.gltfScene = ResourceTracker.track((gltf.scene));\r\n resolve();\r\n });\r\n })\r\n .catch(err => {throw err});\r\n \r\n return promise;\r\n }\r\n}","import Body from '@/models/body';\r\nimport Probe from '@/models/probe';\r\nimport SphericalBody from '@/models/spherical_body';\r\nimport Asteroid from '@/models/asteroid';\r\n\r\ninterface Config {\r\n BaseUrl: string;\r\n resultsListUrl: string;\r\n pathsUrl: string;\r\n missionsUrl: string;\r\n ZeroDate: number;\r\n bodies: Array;\r\n backgrounds: { [id: string]: string };\r\n markerSize: number;\r\n\r\n cameraStartPosition: { [id: string]: number };\r\n\r\n bodiesByNAIFCodes: { [id: string]: string };\r\n\r\n binarySpiceFiles: string[];\r\n}\r\n\r\nconst config: Config = {\r\n BaseUrl: 'https://oits.justinhui.com',\r\n resultsListUrl: 'https://oits.blob.core.windows.net/results?restype=container&comp=list',\r\n\r\n // csv results\r\n pathsUrl: '/results/{id}/values/',\r\n missionsUrl: '/api/mission/',\r\n\r\n ZeroDate: 946724329, // 2000-01-01 00:00:00 corrected for Barycentric time\r\n\r\n // https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/FORTRAN/req/naif_ids.html#Barycenters\r\n bodiesByNAIFCodes: {\r\n 'INTERMEDIATE POINT': 'INTERMEDIATE POINT',\r\n '0': 'SOLAR SYSTEM BARYCENTER',\r\n '1': 'MERCURY BARYCENTER',\r\n '2': 'VENUS BARYCENTER',\r\n '3': 'EARTH BARYCENTER',\r\n '4': 'MARS BARYCENTER',\r\n '5': 'JUPITER BARYCENTER',\r\n '6': 'SATURN BARYCENTER',\r\n '7': 'URANUS BARYCENTER',\r\n '8': 'NEPTUNE BARYCENTER',\r\n '9': 'PLUTO BARYCENTER',\r\n '10': 'SUN',\r\n '1000012': 'CHURYUMOV-GERASIMENKO',\r\n '2000021': 'LUTETIA',\r\n '2002867': 'STEINS',\r\n '3788040': 'OUMUAMUA',\r\n '1000036': 'HALLEY',\r\n '2101955': 'BENNU',\r\n '2000004': 'VESTA',\r\n '3825054': '3825054',\r\n '2099942': '2099942',\r\n '3830896': '3830896',\r\n '1003639': '1003639',\r\n },\r\n\r\n // Textures https://www.solarsystemscope.com/textures/\r\n // Codes http://www-pi.physics.uiowa.edu/docs/spice/NAIF_IDS.HTML\r\n // Used for results\r\n bodies: new Array(\r\n new Probe('PROBE', 0, 0, 10, 'white', 0.0005),\r\n new SphericalBody('SUN', 0, 0, 0, 0.02, '/assets/backgrounds/sun.jpg', 0.002),\r\n new SphericalBody('MERCURY BARYCENTER', 40, 0, 0, 0.004, '/assets/backgrounds/mercury.jpg', 0.02),\r\n new SphericalBody('VENUS BARYCENTER', 80, 0, 0, 0.004, '/assets/backgrounds/venus.jpg', 0.02),\r\n new SphericalBody('EARTH BARYCENTER', 0, 0, 0, 0.006, '/assets/backgrounds/earth.jpg', 0.02),\r\n new SphericalBody('MARS BARYCENTER', 160, 0, 0, 0.006, '/assets/backgrounds/mars.jpg', 0.02),\r\n new SphericalBody('JUPITER BARYCENTER', 200, 0, 0, 0.022, '/assets/backgrounds/jupiter.jpg', 0.02),\r\n new SphericalBody('SATURN BARYCENTER', 240, 0, 0, 0.02, '/assets/backgrounds/saturn.jpg', 0.02),\r\n new SphericalBody('URANUS BARYCENTER', 280, 0, 0, 0.016, '/assets/backgrounds/uranus.jpg', 0.02),\r\n new SphericalBody('NEPTUNE BARYCENTER', 320, 0, 0, 0.016, '/assets/backgrounds/neptune.jpg', 0.02),\r\n new SphericalBody('PLUTO BARYCENTER', 400, 0, 0, 0.008, '/assets/backgrounds/moon.jpg', 0.02),\r\n new SphericalBody('MERCURY', 0, 0, 0, 0.004, '/assets/backgrounds/mercury.jpg', 0.02),\r\n new SphericalBody('VENUS', 0, 0, 0, 0.004, '/assets/backgrounds/venus.jpg', 0.02),\r\n new SphericalBody('MOON', 0, 0, 0, 0.001, '/assets/backgrounds/moon.jpg', 0.02),\r\n new SphericalBody('EARTH', 0, 0, 0, 0.006, '/assets/backgrounds/earth.jpg', 0.02),\r\n new Asteroid('CHURYUMOV-GERASIMENKO', 0, 0, 40, 0.0005),\r\n new Asteroid('LUTETIA', 0, 0, 40, 0.0005),\r\n new Asteroid('STEINS', 0, 0, 40, 0.0005),\r\n new Asteroid('OUMUAMUA', 0, 0, 40, 0.0005),\r\n new Asteroid('HALLEY', 0, 0, 40, 0.0005),\r\n new Asteroid('BENNU', 0, 0, 40, 0.0005),\r\n new Asteroid('VESTA', 0, 0, 40, 0.0005),\r\n new Asteroid('3825054', 0, 0, 40, 0.0005),\r\n new Asteroid('2099942', 0, 0, 40, 0.0005),\r\n new Asteroid('3830896', 0, 0, 40, 0.0005),\r\n ),\r\n\r\n backgrounds: {\r\n 'Milky Way' : '/assets/backgrounds/stars_milky_way.jpg',\r\n 'Universe': '/assets/backgrounds/universe.jpg',\r\n 'Psychedelic': '/assets/backgrounds/psychedelic.jpg',\r\n 'Space': '/assets/backgrounds/space.jpg',\r\n 'White': '/assets/backgrounds/white.jpg',\r\n 'Grey': '/assets/backgrounds/grey.jpg',\r\n 'Black': '/assets/backgrounds/black.jpg',\r\n },\r\n\r\n // Used to mark intermediate points\r\n markerSize: 0.001,\r\n\r\n cameraStartPosition: {\r\n x: 0,\r\n y: 0,\r\n z: 3,\r\n },\r\n\r\n binarySpiceFiles: [\r\n \"1000012.bsp\",\r\n \"101955.bsp\",\r\n \"2IBorisov.bsp\",\r\n \"de430.bsp\",\r\n \"Bennu.bsp\",\r\n \"BORISOV_24-11-2019.bsp\",\r\n \"extrasolar.bsp\",\r\n \"lutetia.bsp\",\r\n \"steins.bsp\"\r\n ]\r\n}\r\n\r\nexport default config;","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultsList.vue?vue&type=style&index=0&id=0d6a5f1a&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultsList.vue?vue&type=style&index=0&id=0d6a5f1a&scoped=true&lang=css&\""],"sourceRoot":""}