{"version":3,"sources":["game.js"],"names":["game","Game","canvasElement","this","_canvas","document","getElementById","_engine","BABYLON","Engine","prototype","createScene","_this","self","_fishing_pole","_fishing_bobber","_fishing_reel","_scene","Scene","_camera","ArcRotateCamera","Math","PI","Vector3","Zero","attachControl","inputs","clear","createDefaultLight","_light","HemisphericLight","skybox","Mesh","CreateBox","skyboxMaterial","StandardMaterial","backFaceCulling","reflectionTexture","CubeTexture","coordinatesMode","Texture","SKYBOX_MODE","diffuseColor","Color3","specularColor","disableLighting","material","_idle_animation","AnimationGroup","_cast_animation","_fishing_animation","_reel_in_animation","onAnimationEndObservable","add","e","animation","name","play","dispatchEvent","Event","_waterMaterial","WaterMaterial","Vector2","bumpTexture","colorBlendFactor","windDirection","windForce","waveHeight","waveLength","waveSpeed","bumpHeight","shoreMaterial1","diffuseTexture","hasAlpha","shoreMaterial2","shoreMaterial3","shoreMaterial4","sandTexture","vScale","uScale","sandMaterial","blueTexture","MeshBuilder","CreateGround","height","width","subdivisions","updatable","_ground","position","y","_shoreline","CreatePlane","sideOrientation","DOUBLESIDE","z","addToRenderList","SceneLoader","ImportMesh","newMeshes","particleSystems","skeletons","getAnimationGroupByName","stop","yaw","roll","rotate","Axis","Y","Space","LOCAL","Z","idleRange","AnimationRange","castRange","fishingRange","reelRange","keys","_i","_a","targetedAnimations","length","targetedAnimation","idleAnimation","clone","getKeys","setKeys","slice","from","to","addTargetedAnimation","target","fishingAnimation","castAnimation","_b","_c","reelInAnimation","start","bobberCubicBezierVectors","Curve3","CreateCubicBezier","animationCastBobber","Animation","ANIMATIONTYPE_VECTOR3","ANIMATIONLOOPMODE_CYCLE","bobberCurvePoints","getPoints","i","push","frame","value","animations","visibility","_fishing_lure","scaling","castCubicBezierVectors","animationCastLure","castCurvePoints","registerBeforeRender","isPlaying","isEnabled","time","_lastTime","x","abs","sin","cos","doCast","getMeshByName","isVisible","reset","doReelIn","min","max","timerLength","floor","random","setTimeout","resize","setScene","getMaterialByName","setEnabled","doRender","runRenderLoop","render","window","addEventListener","app"],"mappings":"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","file":"game.min.js","sourcesContent":["///\n///\n///\nvar game;\nvar Game = /** @class */ (function () {\n function Game(canvasElement) {\n // Create canvas and engine.\n this._canvas = document.getElementById('renderCanvas');\n this._engine = new BABYLON.Engine(this._canvas, true, {}, true);\n }\n Game.prototype.createScene = function () {\n var _this = this;\n var self = this;\n self._fishing_pole = null;\n self._fishing_bobber = null;\n self._fishing_reel = null;\n // Create a basic BJS Scene object.\n self._scene = new BABYLON.Scene(self._engine);\n //_self._scene.debugLayer.show();\n //this._asset_manager = new BABYLON.AssetsManager(self._scene);\n // Create a FreeCamera, and set its position to (x:0, y:5, z:-10).\n self._camera = new BABYLON.ArcRotateCamera(\"Camera\", Math.PI * 1.53, Math.PI / 2.2, 120, BABYLON.Vector3.Zero(), self._scene);\n // Attach the camera to the canvas.\n self._camera.attachControl(self._canvas, false);\n self._camera.inputs.clear(); // lock the camera\n // Create a basic light, aiming 0,1,0 - meaning, to the sky.\n self._scene.createDefaultLight();\n self._light = new BABYLON.HemisphericLight('light1', new BABYLON.Vector3(0, 1, 0), self._scene);\n // Skybox\n var skybox = BABYLON.Mesh.CreateBox(\"skyBox\", 2000.0, self._scene);\n var skyboxMaterial = new BABYLON.StandardMaterial(\"skyBox\", self._scene);\n skyboxMaterial.backFaceCulling = false;\n skyboxMaterial.reflectionTexture = new BABYLON.CubeTexture(\"assets/dist/img/scene/generic/skybox/sunnyday\", self._scene);\n skyboxMaterial.reflectionTexture.coordinatesMode = BABYLON.Texture.SKYBOX_MODE;\n skyboxMaterial.diffuseColor = new BABYLON.Color3(0, 0, 0);\n skyboxMaterial.specularColor = new BABYLON.Color3(0, 0, 0);\n skyboxMaterial.disableLighting = true;\n skybox.material = skyboxMaterial;\n self._idle_animation = new BABYLON.AnimationGroup(\"idle\");\n self._cast_animation = new BABYLON.AnimationGroup(\"cast\");\n self._fishing_animation = new BABYLON.AnimationGroup(\"fishing\");\n self._reel_in_animation = new BABYLON.AnimationGroup(\"reel-in\");\n self._cast_animation.onAnimationEndObservable.add(function (e) {\n // bobber is the last animation to finish\n if (e.animation.name == \"bobber-cast\") {\n self._fishing_animation.play(true);\n document.dispatchEvent(new Event('game:CastEnded'));\n }\n });\n self._reel_in_animation.onAnimationEndObservable.add(function () {\n document.dispatchEvent(new Event('game:ReelInEnded'));\n });\n // Load Materials\n // Water material\n this._waterMaterial = new BABYLON.WaterMaterial(\"waterMaterial\", self._scene, new BABYLON.Vector2(512, 512));\n this._waterMaterial.bumpTexture = new BABYLON.Texture(\"assets/dist/img/scene/lake/textures/waterbump.png\", self._scene);\n this._waterMaterial.colorBlendFactor = 0;\n this._waterMaterial.windDirection = new BABYLON.Vector2(1, 1);\n this._waterMaterial.windForce = -1;\n this._waterMaterial.waveHeight = 0.1;\n this._waterMaterial.waveLength = .1;\n this._waterMaterial.waveSpeed = 10;\n this._waterMaterial.bumpHeight = 0.1;\n // Chippewa Flowage\n var shoreMaterial1 = new BABYLON.StandardMaterial(\"shorelineMaterialChippewaFlowage\", self._scene);\n shoreMaterial1.diffuseTexture = new BABYLON.Texture(\"assets/dist/img/scene/lake/textures/shoreline-chippewa-flowage.jpg\", self._scene);\n shoreMaterial1.diffuseTexture.hasAlpha = true;\n shoreMaterial1.backFaceCulling = false;\n // Eagle River Chain of Lakes\n var shoreMaterial2 = new BABYLON.StandardMaterial(\"shorelineMaterialEagleRiver\", self._scene);\n shoreMaterial2.diffuseTexture = new BABYLON.Texture(\"assets/dist/img/scene/lake/textures/shoreline-eagle-river.jpg\", self._scene);\n shoreMaterial2.diffuseTexture.hasAlpha = true;\n shoreMaterial2.backFaceCulling = false;\n // Lake Michigan\n var shoreMaterial3 = new BABYLON.StandardMaterial(\"shorelineMaterialLakeMichigan\", self._scene);\n shoreMaterial3.diffuseTexture = new BABYLON.Texture(\"assets/dist/img/scene/lake/textures/shoreline-lake-michigan.jpg\", self._scene);\n shoreMaterial3.diffuseTexture.hasAlpha = true;\n shoreMaterial3.backFaceCulling = false;\n // Lake Winnebago\n var shoreMaterial4 = new BABYLON.StandardMaterial(\"shorelineMaterialLakeWinnebago\", self._scene);\n shoreMaterial4.diffuseTexture = new BABYLON.Texture(\"assets/dist/img/scene/lake/textures/shoreline-lake-winnebago.jpg\", self._scene);\n shoreMaterial4.diffuseTexture.hasAlpha = true;\n shoreMaterial4.backFaceCulling = false;\n // Sand\n var sandTexture = new BABYLON.Texture(\"assets/dist/img/scene/lake/textures/ground-sand.jpg\", self._scene);\n sandTexture.vScale = sandTexture.uScale = 4.0;\n var sandMaterial = new BABYLON.StandardMaterial(\"sandMaterial\", self._scene);\n sandMaterial.diffuseTexture = sandTexture;\n // Blue Texture\n var blueTexture = new BABYLON.Texture(\"assets/dist/img/scene/lake/textures/ground-blue.jpg\", self._scene);\n blueTexture.vScale = blueTexture.uScale = 4.0;\n var blueMaterial = new BABYLON.StandardMaterial(\"blueMaterial\", self._scene);\n blueMaterial.diffuseTexture = blueTexture;\n /// MESHES\n // Water mesh\n var water = BABYLON.MeshBuilder.CreateGround(\"waterMesh\", { height: 1024, width: 2048, subdivisions: 32, updatable: false }, self._scene);\n water.material = this._waterMaterial;\n // Ground\n self._ground = BABYLON.MeshBuilder.CreateGround(\"ground\", { height: 1024, width: 2048, subdivisions: 32, updatable: false }, self._scene);\n self._ground.position.y = -20;\n self._ground.material = sandMaterial;\n // shoreline mesh\n self._shoreline = BABYLON.MeshBuilder.CreatePlane(\"shoreline\", { height: 744, width: 2048, sideOrientation: BABYLON.Mesh.DOUBLESIDE }, self._scene);\n self._shoreline.material = shoreMaterial1;\n self._shoreline.position.z = 512;\n self._shoreline.position.y = 372;\n // Configure water material\n this._waterMaterial.addToRenderList(self._ground);\n this._waterMaterial.addToRenderList(skybox);\n this._waterMaterial.addToRenderList(self._shoreline);\n // import models\n BABYLON.SceneLoader.ImportMesh(\"\", \"models/\", \"pole.gltf\", self._scene, function (newMeshes, particleSystems, skeletons) {\n self._scene.getAnimationGroupByName(\"pole\").stop();\n self._scene.getAnimationGroupByName(\"reel\").stop();\n newMeshes[0].name = \"pole\";\n //newMeshes[1].name = \"reel\";\n self._fishing_pole = newMeshes[0];\n var yaw = .5 * 2 * Math.PI;\n var pitch = .1 * 2 * Math.PI;\n var roll = 0 * 2 * Math.PI;\n //self._fishing_pole.rotationQuaternion = yprQuaternion;\n self._fishing_pole.rotate(BABYLON.Axis.Y, yaw, BABYLON.Space.LOCAL);\n //self._fishing_pole.rotate(BABYLON.Axis.X, pitch, BABYLON.Space.LOCAL);\n self._fishing_pole.rotate(BABYLON.Axis.Z, roll, BABYLON.Space.LOCAL);\n //self._fishing_pole.scaling = new BABYLON.Vector3(10,10,10);\n self._fishing_pole.position.z = -100;\n self._fishing_pole.position.y = 7;\n var idleRange = new BABYLON.AnimationRange(\"idle\", 431, 520);\n var castRange = new BABYLON.AnimationRange(\"cast\", 0, 40);\n var fishingRange = new BABYLON.AnimationRange(\"fishing\", 41, 400);\n var reelRange = new BABYLON.AnimationRange(\"reel-in\", 400, 420);\n var keys = [];\n //self._scene.getAnimationGroupByName(\"pole\").normalize();\n for (var _i = 0, _a = self._scene.getAnimationGroupByName(\"pole\").targetedAnimations; _i < _a.length; _i++) {\n var targetedAnimation = _a[_i];\n if (targetedAnimation.animation.name == 'pole_channel0') {\n var idleAnimation = targetedAnimation.animation.clone();\n keys = idleAnimation.getKeys();\n idleAnimation.setKeys(keys.slice(idleRange.from, idleRange.to));\n self._idle_animation.addTargetedAnimation(idleAnimation, targetedAnimation.target);\n var castAnimation = targetedAnimation.animation.clone();\n keys = castAnimation.getKeys();\n castAnimation.setKeys(keys.slice(castRange.from, castRange.to));\n self._cast_animation.addTargetedAnimation(castAnimation, targetedAnimation.target);\n var fishingAnimation = targetedAnimation.animation.clone();\n keys = fishingAnimation.getKeys();\n fishingAnimation.setKeys(keys.slice(fishingRange.from, fishingRange.to));\n self._fishing_animation.addTargetedAnimation(fishingAnimation, targetedAnimation.target);\n var fishingAnimation = targetedAnimation.animation.clone();\n keys = fishingAnimation.getKeys();\n fishingAnimation.setKeys(keys.slice(fishingRange.from, fishingRange.to));\n self._fishing_animation.addTargetedAnimation(fishingAnimation, targetedAnimation.target);\n /*\n var reelAnimation = targetedAnimation.animation.clone();\n keys = reelAnimation.getKeys();\n reelAnimation.setKeys(keys.slice(reelRange.from, reelRange.to));\n self._reel_in_animation.addTargetedAnimation(reelAnimation, targetedAnimation.target);\n */\n }\n }\n for (var _b = 0, _c = self._scene.getAnimationGroupByName(\"reel\").targetedAnimations; _b < _c.length; _b++) {\n var targetedAnimation = _c[_b];\n if (targetedAnimation.animation.name == 'reel_channel0') {\n var reelInAnimation = targetedAnimation.animation.clone();\n keys = reelInAnimation.getKeys();\n reelInAnimation.setKeys(keys.slice(reelRange.from, reelRange.to));\n self._reel_in_animation.addTargetedAnimation(reelInAnimation, targetedAnimation.target);\n }\n }\n self._scene.getAnimationGroupByName(\"idle\").start(true);\n });\n BABYLON.SceneLoader.ImportMesh(\"\", \"models/\", \"bobber.glb\", self._scene, function (newMeshes) {\n newMeshes[0].name = \"bobber\";\n self._fishing_bobber = newMeshes[0];\n self._fishing_bobber.position = new BABYLON.Vector3(180, 40, -100);\n // define curved path for bobber to animate on\n var bobberCubicBezierVectors = BABYLON.Curve3.CreateCubicBezier(new BABYLON.Vector3(180, 40, -100), new BABYLON.Vector3(60, 50, -25), new BABYLON.Vector3(30, 60, -20), new BABYLON.Vector3(0, 3, 0), 60);\n // draw line for visual reference of the curve\n //var cubicBezierCurve = BABYLON.Mesh.CreateLines(\"cbezier\", bobberCubicBezierVectors.getPoints(), self._scene);\n //cubicBezierCurve.color = new BABYLON.Color3(1, 0.6, 0);\n // Create the animation and add to the mesh\n var animationCastBobber = new BABYLON.Animation(\"bobber-cast\", \"position\", 30, BABYLON.Animation.ANIMATIONTYPE_VECTOR3, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);\n var keys = [];\n var bobberCurvePoints = bobberCubicBezierVectors.getPoints();\n for (i = 0; i < bobberCurvePoints.length; i++) {\n keys.push({\n frame: i,\n value: bobberCurvePoints[i]\n });\n }\n animationCastBobber.setKeys(keys);\n self._fishing_bobber.animations = [];\n self._fishing_bobber.animations.push(animationCastBobber);\n self._fishing_bobber.visibility = 0;\n self._cast_animation.addTargetedAnimation(animationCastBobber, self._fishing_bobber);\n //add the bobber to the water\n self._waterMaterial.addToRenderList(self._fishing_bobber);\n });\n BABYLON.SceneLoader.ImportMesh(\"\", \"models/\", \"lure.glb\", self._scene, function (newMeshes) {\n newMeshes[0].name = \"lure\";\n self._fishing_lure = newMeshes[0];\n self._fishing_lure.position = new BABYLON.Vector3(180, 40, -100);\n self._fishing_lure.scaling = new BABYLON.Vector3(.3, .3, .3);\n // define curved path for lure to animate on\n var castCubicBezierVectors = BABYLON.Curve3.CreateCubicBezier(new BABYLON.Vector3(180, 40, -100), new BABYLON.Vector3(60, 50, -25), new BABYLON.Vector3(30, 60, -20), new BABYLON.Vector3(0, -2, 0), 60);\n // draw line for visual reference of the curve\n //var cubicBezierCurve = BABYLON.Mesh.CreateLines(\"cbezier\", castCubicBezierVectors.getPoints(), self._scene);\n //cubicBezierCurve.color = new BABYLON.Color3(1, 0.6, 0);\n // Create the animation and add to the mesh\n var animationCastLure = new BABYLON.Animation(\"lure-cast\", \"position\", 30, BABYLON.Animation.ANIMATIONTYPE_VECTOR3, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);\n var keys = [];\n var castCurvePoints = castCubicBezierVectors.getPoints();\n for (i = 0; i < castCurvePoints.length; i++) {\n keys.push({\n frame: i,\n value: castCurvePoints[i]\n });\n }\n animationCastLure.setKeys(keys);\n self._fishing_lure.animations = [];\n self._fishing_lure.animations.push(animationCastLure);\n self._cast_animation.addTargetedAnimation(animationCastLure, self._fishing_lure);\n //add the bobber to the water\n self._waterMaterial.addToRenderList(self._fishing_lure);\n });\n ////////// RAY CAST TO FIND WATER HEIGHT ////////////\n var i = 0;\n self._scene.registerBeforeRender(function () {\n if (self._scene.getAnimationGroupByName(\"fishing\").isPlaying && self._fishing_bobber.isEnabled()) {\n // @ts-ignore: _LastTime is private error\n var time = _this._waterMaterial._lastTime / 100000;\n var x = self._fishing_bobber.position.x;\n var z = self._fishing_bobber.position.z;\n self._fishing_bobber.position.y = Math.abs((Math.sin(((x / 0.05) + time * _this._waterMaterial.waveSpeed)) * _this._waterMaterial.waveHeight * _this._waterMaterial.windDirection.x * 5.0) + (Math.cos(((z / 0.05) + time * _this._waterMaterial.waveSpeed)) * _this._waterMaterial.waveHeight * _this._waterMaterial.windDirection.y * 5.0));\n }\n });\n };\n Game.prototype.doCast = function () {\n var self = this;\n self._scene.getMeshByName(\"lure\").isVisible = false;\n self._scene.getAnimationGroupByName(\"idle\").reset();\n self._scene.getAnimationGroupByName(\"idle\").stop();\n self._fishing_bobber.position = new BABYLON.Vector3(180, 40, -100);\n document.dispatchEvent(new Event('game:CastStarted'));\n //self._scene.getAnimationGroupByName(\"cast\").normalize(); // don't do this\n self._scene.getAnimationGroupByName(\"cast\").play(false);\n };\n Game.prototype.doReelIn = function () {\n var self = this;\n self._scene.getAnimationGroupByName(\"fishing\").reset();\n self._scene.getAnimationGroupByName(\"fishing\").stop();\n document.dispatchEvent(new Event('game:ReelInStarted'));\n self._scene.getAnimationGroupByName(\"reel-in\").play(true);\n var min = 1;\n var max = 5;\n // make the lure a longer real\n if (self._fishing_lure.isEnabled()) {\n min = 4;\n max = 8;\n }\n var timerLength = Math.floor((Math.random() * (max - min) + min) * 1000);\n setTimeout(function () {\n self._scene.getAnimationGroupByName(\"reel-in\").stop();\n }, timerLength);\n };\n Game.prototype.reset = function () {\n var self = this;\n if (self._fishing_bobber) {\n self._fishing_bobber.position = new BABYLON.Vector3(180, 40, -100);\n }\n // @ts-ignore: _LastTime is private error\n if (self._scene.getAnimationGroupByName(\"fishing\").isPlaying) {\n self._scene.getAnimationGroupByName(\"fishing\").reset();\n self._scene.getAnimationGroupByName(\"fishing\").stop();\n }\n // @ts-ignore: _LastTime is private error\n if (self._scene.getAnimationGroupByName(\"reel-in\").isPlaying) {\n self._scene.getAnimationGroupByName(\"reel-in\").reset();\n self._scene.getAnimationGroupByName(\"reel-in\").stop();\n }\n self._scene.getAnimationGroupByName(\"idle\").play(true);\n };\n Game.prototype.resize = function () {\n var self = this;\n // forces a redraw based on the canvas size, fixes blurry issue since canvas was hidden\n self._engine.resize();\n };\n Game.prototype.setScene = function (value) {\n var self = this;\n switch (value) {\n case \"Eagle River Chain of Lakes\":\n self._shoreline.material = this._scene.getMaterialByName(\"shorelineMaterialEagleRiver\");\n self._ground.material = this._scene.getMaterialByName(\"sandMaterial\");\n self._fishing_bobber.setEnabled(true);\n self._fishing_lure.setEnabled(false);\n this._waterMaterial.windDirection = new BABYLON.Vector2(1, 1);\n this._waterMaterial.windForce = -2;\n this._waterMaterial.waveHeight = .1;\n this._waterMaterial.waveLength = .1;\n this._waterMaterial.waveSpeed = 50;\n this._waterMaterial.bumpHeight = 0.1;\n break;\n case \"Lake Michigan\":\n self._shoreline.material = this._scene.getMaterialByName(\"shorelineMaterialLakeMichigan\");\n self._ground.material = this._scene.getMaterialByName(\"blueMaterial\");\n self._fishing_bobber.setEnabled(false);\n self._fishing_lure.setEnabled(true);\n this._waterMaterial.windDirection = new BABYLON.Vector2(-1, -1);\n this._waterMaterial.windForce = -5;\n this._waterMaterial.waveHeight = .5;\n this._waterMaterial.waveLength = .1;\n this._waterMaterial.waveSpeed = 30;\n this._waterMaterial.bumpHeight = 0.1;\n break;\n case \"Lake Winnebago\":\n self._shoreline.material = this._scene.getMaterialByName(\"shorelineMaterialLakeWinnebago\");\n self._ground.material = this._scene.getMaterialByName(\"sandMaterial\");\n self._fishing_bobber.setEnabled(true);\n self._fishing_lure.setEnabled(false);\n this._waterMaterial.windDirection = new BABYLON.Vector2(-1, -1);\n this._waterMaterial.windForce = -3;\n this._waterMaterial.waveHeight = .5;\n this._waterMaterial.waveLength = .1;\n this._waterMaterial.waveSpeed = 30;\n this._waterMaterial.bumpHeight = 0.1;\n break;\n case \"Chippewa Flowage\":\n self._shoreline.material = this._scene.getMaterialByName(\"shorelineMaterialChippewaFlowage\");\n self._ground.material = this._scene.getMaterialByName(\"sandMaterial\");\n self._fishing_bobber.setEnabled(true);\n self._fishing_lure.setEnabled(false);\n this._waterMaterial.windDirection = new BABYLON.Vector2(1, 1);\n this._waterMaterial.windForce = -5;\n this._waterMaterial.waveHeight = .2;\n this._waterMaterial.waveLength = .1;\n this._waterMaterial.waveSpeed = 50;\n this._waterMaterial.bumpHeight = 0.1;\n break;\n }\n };\n Game.prototype.doRender = function () {\n var _this = this;\n // Run the render loop.\n this._engine.runRenderLoop(function () {\n _this._scene.render();\n });\n // The canvas/window resize event handler.\n window.addEventListener('resize', function () {\n _this._engine.resize();\n });\n };\n return Game;\n}());\nwindow.addEventListener('DOMContentLoaded', function () {\n // Create the game using the 'renderCanvas'.\n // @ts-ignore:\n app.game = new Game('renderCanvas');\n // Create the scene.\n // @ts-ignore:\n app.game.createScene();\n // Start render loop.\n // @ts-ignore:\n app.game.doRender();\n});\n"]}