view code/gameState.lm @ 45:75f808e60aa8

initial simulator ticker. needs print debug cleanup.
author William Morgan <billjunk@mrgn.org>
date Sat, 26 Jul 2014 23:30:55 -0700
parents
children d631e68a45d5
line wrap: on
line source

#{
	import: [
		length
		reverse
		split:at
		map
		fold:with
		filter
		flatten
	] from: (module: "ll.lm")

	myAnd <- :a b {
		// only ones and zeros
		(a + b) = 2
	}

	makeTicker <- :mapWidth mapHeight {

		makeEventType <- :lagTick isMovement behavior{
			print: 12
			:curTick {
				print: 11
				expireTick <- curTick + lagTick
				#[expireTick isMovement :gameState {behavior: expireTick gameState}]
			}
		}

		endOfLives <- makeEventType: (127 * mapWidth * mapHeight * 160) 0 :tick gameState {
			777 print
			addEvents <- []
			// set lives to zero
			#[addEvents gameState]
		}

		/*
		fruitStateEvent	
		fruit1Appears <- makeEventType: (127 * 200) 0 :gameState {
			// set fruit state to on
		}
		fruit2Appears <- (127 * 400)
		fruit1Expires <- (127 * 280)
		fruit2Expires <- (127 * 280)
		//moveLambdaMan <- 127			(eating, lamdamanId)
		//moveGhost <-  (ghostType, ghostId)
		frightModeDeactivate <- (127 * 20)
		*/

		executeEvents <- :tick isMove events gameState {
			event <- 0
			eventTick <- 0
			eventIsMove <- 0
			eventLam <- 0

			unexpired <- []
			res <- 0
			while: { not: (events empty?) } do: {
				event <- events value
				eventTick <- event value
				eventIsMove <- (event tail) value
				print: 17
				if: ( ( eventTick = tick ) myAnd: ( eventIsMove = isMove ) ) {
					eventLam <- ((event tail) tail)
					res <- eventLam: gameState
					unexpired <- res value
					gameState <- res tail
				} else: {
					unexpired <- event | unexpired
				}
				events <- events tail
			}
			print: 18
			#[unexpired gameState]
		}

		executeTick <- :tick events gameState {
			// TODO: update fruit countdown for AI input

			print: 14
			// 1.) movement
			res <- executeEvents: tick 1 events gameState 
			events <- res value
			gameState <- (res tail) value

			print: 15
			// 2.) actions
			res <- executeEvents: tick 0 events gameState
			events <- res value
			gameState <- (res tail) value
			
			print: 16
			// 3.) collide pills powerpills fruit

			#[events gameState]
		}
	
		nextTick <- :events {
			print: 8
			fold: events 0x7FFFFFFF with: :curMin event {
				print: #[9 curMin event]
				eventTick <- event value
				print: 10
				if: eventTick < curMin {
					curMin <- eventTick
				} else: {}
				curMin
			}
		}
		print: 4
		:runUntil {
			res <- 0
			tick <- 1
			events <- [
				endOfLives: 0
			]
			print: 6
			gameState <- #[0 0]
			while: {tick < runUntil} do: {
				print: 7
				tick <- events nextTick
				print: 5
				res <- executeTick: tick events gameState
				print: 13
				events <- res value
				gameState <- res tail
			}
		}
	}

	step <- :myState world {
		print: 1
		ticker <- makeTicker: 10 10
		print: 2
		ticker: 1000
		print: 3

		#[0 0]
	}

	main <- :initWorld ghostCode{
		#[0 step]
	}
}