comparison code/gameState.lm @ 54:476cd9eba2be

fixed event system with refactor to remove gamestate passing. much more simple, less pure. runs correctly in simulator.
author William Morgan <billjunk@mrgn.org>
date Sun, 27 Jul 2014 16:52:36 -0700
parents 2c790eabe379
children c17380c8bac3
comparison
equal deleted inserted replaced
53:2c790eabe379 54:476cd9eba2be
49 makeEventType <- :lagTick isMovement behavior{ 49 makeEventType <- :lagTick isMovement behavior{
50 print: 12 50 print: 12
51 :curTick { 51 :curTick {
52 print: 11 52 print: 11
53 expireTick <- curTick + lagTick 53 expireTick <- curTick + lagTick
54 #[expireTick isMovement :gameState {behavior: expireTick gameState}] 54 #[expireTick isMovement :events {behavior: expireTick events}]
55 } 55 }
56 } 56 }
57 57
58 endOfLives <- makeEventType: (127 * (mapGrid gridArea) * 16) 0 :tick gameState { 58 endOfLives <- makeEventType: (127 * (mapGrid gridArea) * 16) 0 :tick events {
59 lives <- 0 59 lives <- 0
60 777 print 60 777 print
61 addEvents <- [] 61 events
62 #[addEvents gameState] 62 }
63 } 63
64 64 moveLambdaman <- makeEventType: 127 1 :tick events {
65 /*
66 moveLambdaman <- makeEventType: 127 1 :tick gameState {
67 addEvents <- []
68 #[addEvents gameState]
69 }
70 */
71 moveLambdaman <- makeEventType: 127 1 :tick gameState {
72 print: 20 65 print: 20
73 move <- getLambdamanChoice: 66 move <- getLambdamanChoice:
74 newPos <- (calcPos: move lambdamanPos) 67 newPos <- (calcPos: move lambdamanPos)
75 impending <- grid: mapGrid get: newPos 68 impending <- grid: mapGrid get: newPos
76 print: 21 69 print: 21
78 lambdamanPos <- impending 71 lambdamanPos <- impending
79 } else: { } 72 } else: { }
80 73
81 print: 22 74 print: 22
82 if: (impending isFood) { 75 if: (impending isFood) {
83 #[(moveLambdaman: (tick + 10)) gameState] 76 (moveLambdaman: (tick + 10)) | events
84 } else: { 77 } else: {
85 #[(moveLambdaman: tick) gameState] 78 (moveLambdaman: tick) | events
86 } 79 }
87 } 80 }
88 81
89 /* 82 /*
90 fruit <- 0 83 fruit <- 0
91 fruit1Appears <- makeEventType: (127 * 200) 0 :gameState { 84 fruit1Appears <- makeEventType: (127 * 200) 0 :events {
92 fruit <- 80 85 fruit <- 80
93 #[fruit1Expires gameState] 86 fruit1Expires | events
94 } 87 }
95 fruit2Appears <- (127 * 400) 0 88 fruit2Appears <- (127 * 400) 0
96 fruit1Expires <- (127 * 280) 0 89 fruit1Expires <- (127 * 280) 0
97 fruit2Expires <- (127 * 480) 0 90 fruit2Expires <- (127 * 480) 0
98 moveGhost0 <- 1 //(ghostType, ghostId)!? 91 moveGhost0 <- 1 //(ghostType, ghostId)!?
100 moveGhost2 <- 1 //(ghostType, ghostId)!? 93 moveGhost2 <- 1 //(ghostType, ghostId)!?
101 moveGhost3 <- 1 //(ghostType, ghostId)!? 94 moveGhost3 <- 1 //(ghostType, ghostId)!?
102 frightModeDeactivate <- (127 * 20) 0 95 frightModeDeactivate <- (127 * 20) 0
103 */ 96 */
104 97
105 executeEvents <- :tick isMove events gameState { 98 executeEvents <- :tick isMove events {
106 print: #[23 tick isMove events gameState] 99 print: #[23 tick isMove events]
107 event <- 0 100 event <- 0
108 eventTick <- 0 101 eventTick <- 0
109 eventIsMove <- 0 102 eventIsMove <- 0
110 eventLam <- 0 103 eventLam <- 0
111 104
112 unexpired <- [] 105 unexpired <- []
113 res <- 0
114 while: { not: (events empty?) } do: { 106 while: { not: (events empty?) } do: {
115 event <- events value 107 event <- events value
116 eventTick <- event value 108 eventTick <- event value
117 eventIsMove <- (event tail) value 109 eventIsMove <- (event tail) value
118 print: 17 110 print: 17
119 if: ( ( eventTick = tick ) myAnd: ( eventIsMove = isMove ) ) { 111 if: ( ( eventTick = tick ) myAnd: ( eventIsMove = isMove ) ) {
120 eventLam <- ((event tail) tail) 112 eventLam <- ((event tail) tail)
121 res <- eventLam: gameState 113 unexpired <- eventLam: unexpired
122 unexpired <- (res value) | unexpired
123 gameState <- res tail
124 } else: { 114 } else: {
125 unexpired <- event | unexpired 115 unexpired <- event | unexpired
126 } 116 }
127 events <- events tail 117 events <- events tail
128 } 118 }
129 print: 18 119 print: 18
130 #[unexpired gameState] 120 unexpired
131 } 121 }
132 122
133 executeTick <- :tick events gameState { 123 executeTick <- :tick events {
134 // TODO: update fruit countdown for AI input 124 // TODO: update fruit countdown for AI input
135 125
136 print: 14 126 print: 14
137 // 1.) movement 127 // 1.) movement
138 res <- executeEvents: tick 1 events gameState 128 events <- executeEvents: tick 1 events
139 events <- res value
140 gameState <- res tail
141 129
142 print: 15 130 print: 15
143 // 2.) actions 131 // 2.) actions
144 res <- executeEvents: tick 0 events gameState 132 events <- executeEvents: tick 0 events
145 print: #[19 res]
146 events <- res value
147 gameState <- res tail
148 133
149 print: 16 134 print: 16
150 // 3.) collide pills powerpills fruit 135 // 3.) collide pills powerpills fruit
151 136
152 if: pillCount = 0 { 137 if: pillCount = 0 {
153 win <- 1 138 win <- 1
154 #[[] gameState] 139 []
155 } else: { 140 } else: {
156 if: lives = 0 { 141 if: lives = 0 {
157 #[[] gameState] 142 []
158 } else: { 143 } else: {
159 #[events gameState] 144 events
160 } 145 }
161 } 146 }
162 147
163 } 148 }
164 149
175 } 160 }
176 } 161 }
177 162
178 print: 4 163 print: 4
179 :runUntil { 164 :runUntil {
180 res <- 0
181 tick <- 1 165 tick <- 1
182 events <- [ 166 events <- [
183 endOfLives: 0 167 endOfLives: 0
184 moveLambdaman: 0 168 moveLambdaman: 0
185 ] 169 ]
186 print: 6 170 print: 5
187 gameState <- #[0 0]
188 while: {(tick < runUntil) myAnd: (not: (events empty?))} do: { 171 while: {(tick < runUntil) myAnd: (not: (events empty?))} do: {
189 print: 5 172 print: 6
190 res <- executeTick: tick events gameState 173 events <- executeTick: tick events
191 print: 13
192 events <- res value
193 gameState <- res tail
194 print: 7 174 print: 7
195 tick <- events nextTick 175 tick <- events nextTick
196 } 176 }
197 } 177 }
198 } 178 }