From 38e36acc97cecb59df7b26d571956643c989cd77 Mon Sep 17 00:00:00 2001 From: RedEnchilada Date: Sat, 14 May 2016 20:18:54 -0500 Subject: [PATCH] Add title screen and load into it on boot --- assets/sprites/logo.png | Bin 0 -> 9754 bytes init.js | 2 +- other/Memory.js | 4 ++ other/Title.js | 153 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 assets/sprites/logo.png create mode 100644 other/Title.js diff --git a/assets/sprites/logo.png b/assets/sprites/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..75e3d2a5dd11aa54aacd3bcc3bc95136e48be430 GIT binary patch literal 9754 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 b&AbZE-K$^mr$$fxJG2E=R9C2fX%Y56rW%hC literal 0 HcmV?d00001 diff --git a/init.js b/init.js index 62fd095..7e3da32 100644 --- a/init.js +++ b/init.js @@ -1,5 +1,5 @@ document.addEventListener('DOMContentLoaded', function() { Game.init(function() { - Game.setScene(Level("Test Level")); + Game.setScene(Title()); }); }); \ No newline at end of file diff --git a/other/Memory.js b/other/Memory.js index 77d8048..3ee3ffa 100644 --- a/other/Memory.js +++ b/other/Memory.js @@ -68,6 +68,10 @@ Memory = (function() { } } + Memory.file = function(slot) { + return JSON.parse(window.localStorage.getItem("dolphin-save-" + slot)); + } + Memory.loadStage = function() { Game.setScene(Level(data.lastStage)); } diff --git a/other/Title.js b/other/Title.js new file mode 100644 index 0000000..8b08432 --- /dev/null +++ b/other/Title.js @@ -0,0 +1,153 @@ +Title = function() { + var title = Scene(); + + // Scroll planes + var background = ScrollPlane(0, 0, 360, 1, 3072, 0, "bg-mountains", 131); + var waterBack = ScrollPlane(0, 20, 1, 1, 0, 0, "waterback", 130); + var waves = []; + var logo = Renderer.sprite("logo"); + logo.position.x = 240; + + var createdby = Renderer.text("Made by RedEnchilada", 324, 0); + var jam = Renderer.text("For AdventureJam 2016", 20, 0); + + var fade = new PIXI.Graphics(); + + var menu; + + for (var i = 1024; i > 150; i *= 0.85) { + waves.push(ScrollPlane( + i, -3000/i, 40, 250/i, (i)/2, (Math.random()*300-150)/i, "water", Math.round(i/8) + )); + } + + title.init = function() { + title.stage.addChild(background.plane); + title.stage.addChild(waterBack.plane); + waves.forEach(function(p) { + title.stage.addChild(p.plane); + }); + title.stage.addChild(logo); + title.stage.addChild(createdby); + title.stage.addChild(jam); + + fade.beginFill(0x000000); + fade.drawRect(0, 0, 500, 280); + fade.endFill(); + title.stage.addChild(fade); + } + + title.z = 600; + + title.think = function() { + + if (!menu) { + if (title.ticCount == 700 || Input.pressed("accept")) { + menu = [ + Renderer.text("New Game", 200, 170), + Renderer.text("Load Game", 200, 190), + Renderer.text("Slot: " + Memory.slot, 215, 220), + ]; + + menu.forEach(function(m) { + title.stage.addChild(m); + m.tint = 0x66FF00; + }); + + title.menuOption = Memory.file(Memory.slot) ? 1 : 0; + menu[1 - title.menuOption].alpha = 0.4; + txt(); + } + + return; + } + + if (title.leaving) { + if (fade.alpha >= 1) { + if (title.menuOption) { + Memory.load(true); + } else { + Memory.clear(); + Game.setScene(Level("Intro")); + } + } + + return; + } + + if (Input.pressed("up")) { + title.menuOption = 0; + menu[0].alpha = 1; + menu[1].alpha = 0.4; + } + + if (Input.pressed("down")) { + title.menuOption = 1; + menu[1].alpha = 1; + menu[0].alpha = 0.4; + } + + if (Input.pressed("left")) { + Memory.slot = (Memory.slot + 3) % 5 + 1; + txt(); + } + + if (Input.pressed("right")) { + Memory.slot = Memory.slot % 5 + 1; + txt(); + } + + if (Input.pressed("accept")) { + if (title.menuOption == 0 || Memory.file(Memory.slot)) { + title.leaving = true; + } else { + // Indicate that this isn't possible + } + } + + function txt() { + var file = Memory.file(Memory.slot); + + var list = { // SSSPPPOOOIIILLLEEERRRSSS. + "Save 1": "Ocean", + "Save 2": "Cavern", + "Save 3": "Lair", + "Save 4": "Final", + "Intro": "Epilogue", + "Save 5": "Closure", + }; + + menu[2].text = "Slot: " + Memory.slot + " - " + (file ? list[file.lastStage] : "EMPTY"); + } + } + + title.render = function() { + waves.forEach(function(p) { + p.plane.tilePosition.x -= p.driftFactor + 0.01; + + p.plane.position.y = 150 - title.z*p.moveFactor + p.z; + }); + + waterBack.plane.position.y = Math.max(0, Math.min(150-(title.z/5), 170-(title.z*1.5))); + waterBack.plane.scale.y = 280 - waterBack.plane.position.y; + + background.plane.position.y = (title.z/-6)-160; + background.plane.tilePosition.x -= 0.3; + + logo.position.y = 50 - title.z; + createdby.position.y = Math.min(500 - title.z, 250); + jam.position.y = 200 - title.z; + + if (title.z > -50) { + title.z --; + } + + if (title.leaving) { + fade.alpha += 0.02; + } else if (fade.alpha > 0) { + fade.alpha -= 0.005; + } + } + + return title; +}; \ No newline at end of file