From cea54d7dee98f97e7ed01c9b33befc6f6b89ed22 Mon Sep 17 00:00:00 2001 From: Alexander Yakovlev Date: Mon, 21 Mar 2016 08:41:56 +0700 Subject: [PATCH] "Go back" functionality --- game/begin.coffee | 5 ++++- lib/salet.coffee | 15 +++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/game/begin.coffee b/game/begin.coffee index a9327b9..40260e2 100644 --- a/game/begin.coffee +++ b/game/begin.coffee @@ -51,5 +51,8 @@ room "inventory", salet, for thing in salet.character.inventory text += "* #{salet.character.listinv(thing.name)}\n" return text+"\n\n"+""" -
+
""" + actions: + exit: (salet) -> + return salet.goBack() diff --git a/lib/salet.coffee b/lib/salet.coffee index 64071ff..d5a847b 100644 --- a/lib/salet.coffee +++ b/lib/salet.coffee @@ -196,6 +196,8 @@ class Salet seed: null # Keeps track of the links clicked, and when. sequence: [], + # Keeps track of the rooms visited, for when we want to "go back" + path: [], # The time when the progress was saved. saveTime: null } @@ -295,12 +297,14 @@ class Salet now = (new Date()).getTime() * 0.001 @time = now - @startTime @progress.sequence.push({link:code, when:@time}) + if @getRoom(code)? # if it's a room + @progress.path.push(code) @processLink(code) - # Presumably, the last action is the one that fired goBack, so we go to the - # one before it. + # Go back N rooms. It's not an UNDO. + # Also, steps = 1 is the current room @goBack = (steps = 2) => - @processClick(@progress.sequence[@progress.sequence.length - steps].link) + @processClick(@progress.path[@progress.path.length - steps]) # Transition between rooms. @doTransitionTo = (newRoomId) => @@ -426,7 +430,10 @@ class Salet # Do the first state. @doTransitionTo(@start) - @getRoom = (name) => @rooms[name] + @getRoom = (name) => + if @rooms[name]? + return @rooms[name] + return undefined # Just an alias for getCurrentRoom @here = () => @getCurrentRoom()