changeset 41:20327ae2120b

merged.
author William Morgan <bill@mrgn.org>
date Sun, 15 Jul 2012 14:41:28 -0700
parents f38437d22ebd (diff) 9bccdb3ac979 (current diff)
children 21b14768ea00 0c09730c173e
files src/sim.tp
diffstat 1 files changed, 31 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/sim.tp	Sun Jul 15 14:27:21 2012 -0700
+++ b/src/sim.tp	Sun Jul 15 14:41:28 2012 -0700
@@ -32,7 +32,7 @@
 				string <- idStr
 				isrobot <- { false }
 				eq <- :other { id = (other id) }
-				navigable <- { cannav }
+				navigable <- { cannav }				
 			}
 			typedict set: (ret id) ret
 			ret
@@ -66,7 +66,7 @@
 					busted <- false
 					mine <- null
 					doCmd <- :cmd {
-						action <- commands get: cmd
+						action <- commands get: cmd withDefault: { null }
 						action:
 					}
 					move <- :xDelta yDelta {
@@ -120,6 +120,8 @@
 			nextGrid <- #[]
 			_robot <- null
 			endreached <- false
+			_lambdaCount <- 0
+			_succeeded <- false
 			ret <- #{
 				grid <- in_grid
 				width <- in_width
@@ -178,14 +180,35 @@
 					obj x!: (calcX: Index)
 					obj y!: (calcY: Index)
 				}
+				lambdaCount <- {_lambdaCount}
 				water <- 0
 				flooding <- 0
 				waterproof <- 10
 				moves <- 0
 				ended <- {endreached}
-				succeeded <- false
+				succeeded <- {_succeeded}
+				succeeded! <- :newval {
+					endreached <- newval
+					_succeeded <- newval
+				}
 				doUpdate <- {
-					true
+					foreach: grid :index value {
+						if: (value eq: (cellTypes rock)) {
+							x <- calcX: index
+							y <- calcY: index
+							below <- getCell: x (y - 1)
+							if: (below eq: (cellTypes empty)) {
+								setCell: x y (cellTypes empty)
+								setCell: x (y - 1) value
+							}
+						} else: {
+							if: (value eq: (cellTypes closedLift)) {
+								if: (_robot collected) = _lambdaCount {
+									grid set: index (cellTypes openLift)
+								}
+							}
+						}
+					}
 				}
 				advance <- :roboCmd {
 					endreached <- roboCmd = "A"
@@ -233,6 +256,10 @@
 					_robot <- el
 					_robot mine!: ret
 					ret updatePos: _robot index
+				} else: { 
+					if: (el eq: (cellTypes lambda)) {
+						_lambdaCount <- _lambdaCount + 1
+					}
 				}