diff --git a/prefabs/shipPrefab.js b/prefabs/shipPrefab.js index 99efffd..34f767f 100644 --- a/prefabs/shipPrefab.js +++ b/prefabs/shipPrefab.js @@ -20,7 +20,9 @@ var pr_ship = OS.P.Add("Ship", { moveStepSize: 3, moveStepAmount: 5 * Oversimplified.R[Oversimplified.R.currentRoom].stepSpeed, moveStepProgress: 0, - doTakeStep: false + doTakeStep: false, + + energyRefillTimer: 0 }); pr_ship.Do = function () { @@ -36,6 +38,9 @@ pr_ship.Do = function () { } else if (ct_down().down) { this.currentSpeed--; } + if (this.currentSpeed > 1 && G.stats.maxEnergy / G.stats.energy > this.currentSpeed + G.stats.crew) { + this.currentSpeed--; + } this.currentSpeed = Math.clamp(this.currentSpeed, 0, 4); this.moveStepProgress += this.currentSpeed * this.moveStepAmount; @@ -47,52 +52,74 @@ pr_ship.Do = function () { } this.SeamlessScroll(); - console.log(G.player.name + " created at " + G.player.x + ", " + G.player.y); + // console.log(G.player.name + " created at " + G.player.x + ", " + G.player.y); } pr_ship.AfterDo = function () { this.CheckMovement(); + this.UpdateEnergy(); } pr_ship.CheckMovement = function () { var moveAmount = (G.stats.speed + this.currentSpeed) * OS.S.pixelScale; + var movedSuccessfully = false; switch (this.direction) { case 0: if (this.image.currentAnimation != "Ship Right") this.SetAnimation("Ship Right"); - if (this.doTakeStep) this.SimpleMove(moveAmount, 0, true); + if (this.doTakeStep) movedSuccessfully = this.SimpleMove(moveAmount, 0, true, 8); break; case 45: if (this.image.currentAnimation != "Ship Up-Right") this.SetAnimation("Ship Up-Right"); - if (this.doTakeStep) this.SimpleMove(moveAmount, -moveAmount, true); + if (this.doTakeStep) movedSuccessfully = this.SimpleMove(moveAmount, -moveAmount, true, 8); break; case 90: if (this.image.currentAnimation != "Ship Up") this.SetAnimation("Ship Up"); - if (this.doTakeStep) this.SimpleMove(0, -moveAmount, true); + if (this.doTakeStep) movedSuccessfully = this.SimpleMove(0, -moveAmount, true, 8); break; case 135: if (this.image.currentAnimation != "Ship Up-Left") this.SetAnimation("Ship Up-Left"); - if (this.doTakeStep) this.SimpleMove(-moveAmount, -moveAmount, true); + if (this.doTakeStep) movedSuccessfully = this.SimpleMove(-moveAmount, -moveAmount, true, 8); break; case 180: if (this.image.currentAnimation != "Ship Left") this.SetAnimation("Ship Left"); - if (this.doTakeStep) this.SimpleMove(-moveAmount, 0, true); + if (this.doTakeStep) movedSuccessfully = this.SimpleMove(-moveAmount, 0, true, 8); break; case 225: if (this.image.currentAnimation != "Ship Down-Left") this.SetAnimation("Ship Down-Left"); - if (this.doTakeStep) this.SimpleMove(-moveAmount, moveAmount, true); + if (this.doTakeStep) movedSuccessfully = this.SimpleMove(-moveAmount, moveAmount, true, 8); break; case 270: if (this.image.currentAnimation != "Ship Down") this.SetAnimation("Ship Down"); - if (this.doTakeStep) this.SimpleMove(0, moveAmount, true); + if (this.doTakeStep) movedSuccessfully = this.SimpleMove(0, moveAmount, true, 8); break; case 315: if (this.image.currentAnimation != "Ship Down-Right") this.SetAnimation("Ship Down-Right"); - if (this.doTakeStep) this.SimpleMove(moveAmount, moveAmount, true); + if (this.doTakeStep) movedSuccessfully = this.SimpleMove(moveAmount, moveAmount, true, 8); break; default: console.log("No valid direction"); break; } + + if (this.doTakeStep && !movedSuccessfully) { + this.currentSpeed = 0; + } +} + +pr_ship.UpdateEnergy = function () { + this.energyRefillTimer++; + + if (this.doTakeStep) { + G.stats.energy -= ((this.currentSpeed / G.stats.speed) + ((G.stats.hunger + G.stats.thirst) * 0.1)) * 0.25; + + if (this.energyRefillTimer >= (100 / G.stats.crew) + ((G.stats.hunger + G.stats.thirst) * 10)) { + G.stats.energy += G.stats.crew; + this.energyRefillTimer = 0; + } + + if (G.stats.energy < 0) G.stats.energy = 0; + if (G.stats.energy > G.stats.maxEnergy) G.stats.energy = G.stats.maxEnergy; + } } pr_ship.SeamlessScroll = function () { diff --git a/rooms/oceanRoom.js b/rooms/oceanRoom.js index 5ef1185..540ed91 100644 --- a/rooms/oceanRoom.js +++ b/rooms/oceanRoom.js @@ -56,6 +56,9 @@ rm_Ocean.DrawAbove = function () { // Draw the speed indicator in Bottom Left corner. OS.context.drawImage(rm_Ocean.speedGaugeImg, G.player.currentSpeed * 32, 0, 32, 32, 16, OS.camera.height - 32 - 16, 32, 32); + // Draw Energy Bar + this.DrawEnergyBar(); + // drawPixelText("Testing 1 2 3!", 0, 0, 0, "white", 4); // drawPixelText("Testing 1 2 3!", 0, 64, 0, "white", 6); } @@ -64,3 +67,15 @@ rm_Ocean.DoLast = function () { // Clear Objects on room exit. This is best practice unless you need persistent objects. //rm_Ocean.objects = {}; } + +rm_Ocean.DrawEnergyBar = function () { + var percentage = G.stats.energy / G.stats.maxEnergy; + var barHeight = 2 * OS.S.pixelScale; + var maxBarWidth = 32; + var barWidth = Math.round(maxBarWidth * percentage) * OS.S.pixelScale; + + var saveFillStyle = OS.context.fillStyle; + OS.context.fillStyle = "#0055FF"; + OS.context.fillRect(64, OS.camera.height - barHeight - 16, barWidth, barHeight); + OS.context.fillStyle = saveFillStyle; +}