From d07c6306164c7bc1555af0eeabf5ca0afbf4b892 Mon Sep 17 00:00:00 2001
From: Manuel Herrmann <it@icetruck.de>
Date: Thu, 24 Sep 2015 19:56:11 +0200
Subject: [PATCH] elevator open/close; context for actions

---
 .../view/signups/game1/js/character.js        |   6 ++--
 .../view/signups/game1/js/events.js           |  12 +++----
 .../view/signups/game1/js/story.js            |  32 ++++++++++++++++++
 .../signups/game1/maps/castle_entrance.svg    | Bin 585483 -> 587639 bytes
 4 files changed, 41 insertions(+), 9 deletions(-)

diff --git a/registration-system/view/signups/game1/js/character.js b/registration-system/view/signups/game1/js/character.js
index b2b05d6..3fea714 100644
--- a/registration-system/view/signups/game1/js/character.js
+++ b/registration-system/view/signups/game1/js/character.js
@@ -118,7 +118,7 @@ Char.prototype.animate = function() {
 Char.prototype.physics = function() {
 	if (!this.moveTarget || this.moveTarget && this.moveTarget.length == 0) {
 		if (this.onArrivalCallback && typeof this.onArrivalCallback.func === 'function')
-			this.onArrivalCallback.func(this.onArrivalCallback.param);
+			this.onArrivalCallback.func.apply(null, this.onArrivalCallback.params);
 		this.onArrivalCallback = null;
 		return;
 	}
@@ -163,11 +163,11 @@ Char.prototype.updatePosition = function() {
  * @param y coord
  * @param onArrival optional callback function
  */
-Char.prototype.setMoveTarget = function(x, y, onArrival, onArrivalParam) {
+Char.prototype.setMoveTarget = function(x, y, onArrival, onArrivalParams) {
 
 	this.onArrivalCallback = {
 		func: onArrival,
-		param: onArrivalParam
+		params: onArrivalParams
 	};
 
 	if (Game.config.usePathFinding)
diff --git a/registration-system/view/signups/game1/js/events.js b/registration-system/view/signups/game1/js/events.js
index 7f3190a..5f63127 100644
--- a/registration-system/view/signups/game1/js/events.js
+++ b/registration-system/view/signups/game1/js/events.js
@@ -49,7 +49,7 @@ EventHandler.prototype.getEventOn = function (trigger, x, y, callback) {
                 this.walkOnEvents[node.id] = true;
                 callback(node, true);
             } else {
-                callback(node);
+                callback(node, null);
             }
         } else {
             if (trigger == 'walkon' && this.walkOnEvents[node.id]) {
@@ -94,7 +94,7 @@ EventHandler.prototype.handleEvent = function (event, context) {
             Game.instance.nextMap(event.destination, event.target);
             break;
         case 'special':
-            eventWasActive = EventHandler.handleAction(event);
+            eventWasActive = EventHandler.handleAction(event, context);
             break;
     }
 
@@ -103,7 +103,7 @@ EventHandler.prototype.handleEvent = function (event, context) {
     }
 };
 
-EventHandler.handleAction = function (event) {
+EventHandler.handleAction = function (event, context) {
     var isPossible = Story.actions[event.action].possible();
     // check, whether action exists and is allowed at this point
     if (event.action && event.action in Story.actions && isPossible) {
@@ -115,18 +115,18 @@ EventHandler.handleAction = function (event) {
                 var xy = Vec.add(getTranslation(spawn[0][0], Game.char.svg[0][0]), [bbox.x, bbox.y]);
                 // trigger action, then walk to target
                 if (event.directAction && event.directAction === 'true') {
-                    Story.actions[event.action].action(event);
+                    Story.actions[event.action].action(event, context);
                     Game.char.setMoveTarget(xy[0], xy[1]);
                 }
                 // walk to the action point, start action on callback
                 else {
-                    Game.char.setMoveTarget(xy[0], xy[1], Story.actions[event.action].action, event);
+                    Game.char.setMoveTarget(xy[0], xy[1], Story.actions[event.action].action, [event, context]);
                 }
             }
         }
         // otherwise start action directly
         else {
-            Story.actions[event.action].action(event);
+            Story.actions[event.action].action(event, context);
         }
     }
     return isPossible;
diff --git a/registration-system/view/signups/game1/js/story.js b/registration-system/view/signups/game1/js/story.js
index e5118a6..03b43df 100644
--- a/registration-system/view/signups/game1/js/story.js
+++ b/registration-system/view/signups/game1/js/story.js
@@ -7,6 +7,38 @@ Story.actions = {
     // =================================================================================================================
     // Actions in the Fachschaft room
 
+    'castlee_door': {
+        state: {
+            doorInitialPos: {}
+        },
+        possible: function() { return true; },
+        action: function(event, context) {
+            if (context.bEnter === null) return;
+
+            var state = Story.actions.castlee_door.state;
+            var doorLeftId = '#' + event.id + '_l';
+            var doorLeft = Game.char.svg.select(doorLeftId);
+            var doorRightId = '#' + event.id + '_r';
+            var doorRight = Game.char.svg.select(doorRightId);
+
+            if (state.doorInitialPos[doorLeftId] === void 0)
+                state.doorInitialPos[doorLeftId] = Number(doorLeft[0][0].getAttribute('x'));
+            if (state.doorInitialPos[doorRightId] === void 0)
+                state.doorInitialPos[doorRightId] = Number(doorRight[0][0].getAttribute('x'));
+
+            var l = state.doorInitialPos[doorLeftId];
+            var r = state.doorInitialPos[doorRightId];
+
+            var moveTo = context.bEnter ? 50 : 0;
+
+            doorLeft.transition()
+                .duration(300)
+                .attr('x', l - moveTo);
+            doorRight.transition()
+                .duration(300)
+                .attr('x', r + moveTo);
+        }
+    },
     'fs_firstApproach': {
         state: {
             welcome_message: false, // welcome message spoken
diff --git a/registration-system/view/signups/game1/maps/castle_entrance.svg b/registration-system/view/signups/game1/maps/castle_entrance.svg
index fe44675e8888892d617c61e91927965fa2164151..d91c3702fea420fad38692b5176d9638dbf1723e 100644
GIT binary patch
delta 2457
zcmcIlO=w(I6lPu;=MoDlX`(`dx6_4H-rU^(pVIUPOrf|F?5brLW~Oy)oEb7hV+0w{
zMNw-?>*6l56x>A7-RvZL!Ht5!ph9sG!31&Rri$mjnfGSeOsWM9T=M4LbI;HBedpW{
zemwri-tjMd^tiM{;blgtr0=drH`b$EZ#{~BdhcXm3WvXX<665?Zq-g!-drd+Y6!Pf
z^L>Y_3k5@o6P!uzdpD!=Io<o~X0(`_a7_F2Ytb<$*@L%M>Wyl1r3jAc0Y~7LS^x1`
zRLD{P+lSH2jqSAv)&#6WuqI(W1}op&UPG@h`d4m8(trK~%J)j&qOYP$nh|H6jEkHI
zLnXtU5y_p1i;P>sjW7}?pF&&C;vyy18YVI4L}_7F9L$7qTHvCUgjuOX%!p7-aR1JC
z=)@&Si80EA5D?251(zi;(%KM15ltPn5JPZcxmGU3kW46nnIoK9;~<72hJp`VREj9Z
z6pICcT_0_s(q+Ync1%LflrSZPz+i73m_dZ#R$J*H0%W4BG9f>$47ZpY!WeZBK)_9^
zg~ml=h~`qpkgTwbir$x7XfE<|J80Vf`8|5xAKr?d=~fpCZ(sliN~2WA5R?cZjl~sA
zV@<%549Ny$Li&U<EfOI6Un5%s<Cq4RlT)ape{pmt^FiaHCf$C3#LNO>+3C<lwlxfp
zZp8!l+3)lNzco-9#_eXc-h!2=+64TSFsZ8Xt0U*2z^wfJ*Ox)N1NXv=IS%?Alx_U`
z-=H(TvW>1~GJUG|`!;&}aQJ<~U*AD9e)H4(q(A#Bn)KUyXfCjE)PKE$8r^<3Vw_OJ
zDW!yRD`KS`0TKj%7&Rc?K^7@9u#*6%hQxq^2Y{#6u#+Z_y9qHPyzHlCXfAP|6>y%$
zy`Pgb4S5hH%vlR+$r!;GhKvP9(yGTm{!ff}`U~KEVIx1CfZYSIo8udRK|2#B73kj*
zOGD58EBz0vI}qg1uZb>3K^sEc#eKXo0^|V5QS<)*V+B*jj?t|@w})m`2KghYoQa7e
ze)E(3)C^1~X^7)o#M}`pU<BD0{F#mXTqg5YSHNt7aSA9)3vDP2!!XD!NLs`WrlAa@
zhQZjfnt|S71}biy!3w6aFjmJ!xJKb#7_tmzI)jG>q^t=9S7t<Db!eTX`jw6-Rh!M_
zfpWaLi(c~gcG0su?Xb>jtF};Rw`!Goc_|ZExzedO8w-U>x!qZ+)e;{*tJPoJMNj*)
z8~LNd(n=O4yra~ySTY9LN@^fS5VjMP#T=%;gKFV~N~i;#DtLM<6zkwfN)4r@Hp9Uc
zifENPuL-U`I`_o1zjZr$&QI>4C;hEmglDU@cBkGbkEU9>()K^^qQZ1}`D(2Lx0lMR
zwdGQ~RbFWXGG<>KS6Wv0eP|>=`SP9USgzvfUBvw6o#;?Epvp&49gHb>j({!BO)P;x
z!7Z2n2f6-Y4(f+Kt~|iNWveMXR)D{;L<;dRX_<Y}8mFvLVfoF^fOA0M<ph?+N7qjQ
U&!2`{r{=Goo;o$(z7GHX2838^Pyhe`

delta 1036
zcmbVK%}Z2K6ld<J@8VYrlR!{jGY~G`yWZ~))3Al@YY{FI37gT$vSA$hpf*t;kxdZQ
zg;wPv0yom;1=6N}p%^7Bqm3rvqD_kybtZK}q845_T;4h7_wMif&hPtH_U^~*qDKvm
zg{52bXm%c@l6i#I?xYE~{^lGyc!X0aiDZ;#n#0;DOi#^>pDpJ4$FB`$lp~BP%d}sb
zLnl%;LHE#bDy=Q`7c1yc>twDlF<BnW09@BHT@B3f?OG$ix%}Pcmnx_w#eDHT>YQDz
zAc!<X14JW46GV`#R`B^@|LJ)U_($uw!;dZm9m&IY_!SzFlrSb`#E25g$}naM=sOj~
zf)U}Yfs`}EIwx7g2^Yp{$PlTGj5v&-skLFO4Kc=Y3os&tX4b!0#=Rq45M?cwQOq3C
zN*EW$ToWp|gcrCaMo3zNOJbF=wLZd}G?0QeMulOKpuhtFVGLp_BPolhk5=&5sL+IS
zAx#v+5K0IEC_|WJR>RL7p^UR_ZW`W}5hY4-S?h8zh*mZN22wer!dPjd1!pGWlyCzB
zBpWNZ8~L@-bbIQkU*E$0{`C(K@WESb{g+idRoAm8dGZ0@Xx;uky@lKT`#0%M|MWBN
z_Te&W@n@>2%|G76)BZpe9S*YjJf-=(KVC(>r!Ez9(_<G3`7+z_NEluzoGVYl-i;)V
z8LjJuT}K$$40TM|dgbb1#!*ECNUi+PZQRpQf)uUSOJEr4pKao<pp+Xg*Y?v^McF-6
zPS&aH+I7EFv@is0Vf^)%!M~X_?=Uej_3c%Z*+b@!E}}lf{&W!r7Al0}|7U}D+4!M_
ipxZAt;YPpk4HuJ*ulQ%`FB`ND^i3RV9_X974A(CQxgNFv

-- 
GitLab